En PHP c'est strrev()
, dans Rails c'est .reverse
, mais la plupart des langages n'ont pas de fonction inverse de chaîne. Certains ont des fonctions inverses de tableau qui peuvent être utilisées sur des caractères. Je pensais que cela devait être un oubli majeur mais il m'est alors venu à l'esprit, à quoi utiliseriez-vous réellement la chaîne inversée pour ???
La seule fois où je peux penser que je l'ai vu, c'est dans les démos et les leçons pour tourner "Hello World!" dans "! dlroW olleH".
Ma question est; Y a-t-il une utilité pour inverser une chaîne ou est-ce complètement inutile?
.
Addenda
Il y a eu bien plus de réponses que j'attendais et toutes n'étaient pas entièrement académiques. J'aurais mis de l'argent que personne ne pourrait trouver d'exemple légitime. Je ne pensais pas non plus que j'allais apprendre quoi que ce soit de nouveau, mais la suggestion de regex de Mark Canlas est tout simplement géniale et j'ai hâte d'avoir l'opportunité de faire ses preuves. Merci à tous.
la source
a ^= b; b ^= a; a ^= b;
Réponses:
Sexegers
Parfois, les problèmes qui impliquent des expressions régulières peuvent être plus facilement écrits en inversant la chaîne d'entrée et en abordant le problème d'une manière différente.
Technique gracieuseté de l'homme qui m'a appris Perl.
Sexeger sur PerlMonks
la source
Eh bien, c'est une réponse ironique.
"Back in the day" Je possédais une boîte Unix, et elle avait un fichier de dictionnaire ordonné de mots anglais, utilisé pour la vérification orthographique.
J'ai créé un nouveau fichier en inversant tous les mots du dictionnaire, en les triant, puis en les inversant à nouveau. Le résultat a été une liste de mots triés de droite à gauche.
Donc, si vous le cherchiez pour un mot, à côté de ce mot se trouveraient des mots avec des terminaisons similaires. Il était donc facile de faire de petits poèmes!
Vous pouvez vraiment vous amuser quand vous voyez ce qui rime avec quoi.
la source
Je suis codeur / développeur / administrateur système depuis environ 10 ans et je ne me souviens pas avoir jamais eu besoin d'une inversion de chaîne dans des situations réelles.
Le seul cas d'utilisation immédiat auquel je peux penser est la conversion de la base numérique: effectuée naïvement, la procédure renvoie une chaîne inversée. Cependant, avec un peu de calcul, vous pouvez calculer à l'avance la quantité d'espace nécessaire, vous pouvez donc commencer à remplir le tampon depuis la fin.
la source
memmove
au début lorsque vous avez terminé. C'est probablement moins cher que de calculer log (n) / log (base) pour calculer le nombre de chiffres nécessaires.la source
0
àn/2
et comparer le caractère à la fin opposée.while ( (*p == *q) && (p <= q) {p++; q--} return p > q;
en C et dans d'autres langages de pointeurs.Entrevues!
Inverser une chaîne (en place ou non) est une question d'entretien très courante pour les connaissances de base en programmation. Une langue dépourvue de ces fonctions intégrées serait difficile à interviewer. Le candidat devrait en fait savoir quelque chose. 1
1: Ceci est une réponse ironique.
la source
J'ai vu des situations où une application de bureau parlait avec des périphériques intégrés et changeait constamment l'endianité de l'ordre des octets, et les données étaient déplacées sous forme de chaînes. C'est à peu près tout pour moi.
Je n'aurais pas utilisé de chaînes pour cette application mais c'est comme ça .....
la source
Ce n'est pas la meilleure solution pour masquer une adresse e-mail, car lorsque vous l'ajoutez au presse-papiers, elle est toujours inversée. Et, s'il devenait populaire, il serait bientôt détecté par des robots de grattage d'e-mails.
Pourtant, cela a été suggéré .
la source
ASCII n'est pas le meilleur encodage pour l'information génétique (vous pouvez emballer les types de base ACGT en 2 bits). Emballez-les dans un éventail de longs et vous obtenez 32 "lettre" génétique par mot. L'ADN peut se retourner, vous devez donc vérifier qu'un morceau d'ADN contre les deux vers l'avant sont des copies inversées d'une séquence de test. Ainsi, être capable d'inverser une chaîne de quantités de 2 bits peut être très utile pour divers types d'analyses génétiques.
J'avais comme élément sur une référence pour les agences d'espionnage, à quelle vitesse pouvez-vous inverser les bits sur une longue période (en fait, un très long tableau de longs-longs). La méthode évidente d'échange de 2 bits à la fois est beaucoup plus lente que les méthodes moins évidentes. Ceux-ci sont liés à certains des algorithmes soignés pour la transposition de tableaux en place.
Tangurena: L'opération à laquelle vous faites référence s'appelle un dénombrement de la population. Des souhaits similaires pour les données compressées sont en tête et en fin de compte zéro. Il y a beaucoup de choses vraiment intéressantes que l'on peut faire avec des données compactées. Une seule opération sur une longue période consiste en une connexion parallèle à 64 voies, donc si vous savez ce que vous faites, vous pouvez obtenir des performances incroyables pour certains types de calculs.
la source
Il est plus facile de travailler avec la chaîne inversée.
Travailler avec des entiers en tant que chaînes est beaucoup plus facile si les chaînes sont inversées. J'ai construit quelques fonctions de bibliothèque pour faire des mathématiques avec de grands entiers et utilisé l'inversion de chaîne pour rendre les fonctions arithmétiques plus simples.
Certes, je ne l'ai utilisé que pour lancer des réponses sur Project Euler, mais la prémisse d'origine tient toujours.
la source
Peut-être un support multilingue à faible coût, pour les langues qui utilisent des lettres de droite à gauche (comme l'arabe), au lieu de gauche à droite. Bien sûr, vous devez faire attention aux caractères d'accent modifiant le bon caractère ...
la source
Je ne sais pas peut-être que quelqu'un a un besoin brûlant de vérifier le palindrome ...
Je ne pense pas que ce soit complètement inutile, car il peut bien y avoir des situations où l'on doit pouvoir inverser une chaîne.
la source
Dans le traitement et l'analyse du langage naturel, il est parfois plus facile de rechercher une chaîne de la fin au début. Une chaîne inverse serait utile pour le débogage, ou comme une autre façon d'écrire la boucle (inverser la chaîne puis boucle de l'index 0 à n-1).
De plus, certaines langues sont écrites de droite à gauche, donc un inverseur de chaîne pourrait être utilisé pour cela si vous étiez dans un environnement qui ne reconnaissait pas nativement les langues LTR / RTL.
Une chaîne (dans certaines langues) est un tableau de caractères, mais cela pourrait tout aussi bien être des chèques de paie ou des modifications d'inventaire. Dans une boucle traversant ces derniers, vous pourriez faire des calculs qui devraient être les mêmes quel que soit l'ordre dans lequel vous les traitez. Un test unitaire parfaitement cromulent consisterait à vérifier si les calculs s'appliquent de la même manière en avant ou en arrière. Cela peut être trivialement évident pour l'ajout, peut-être pas pour d'autres opérations plus opaques.
la source
Pour les compilateurs?
C'est amusant, mais la plupart des symboles dans une langue commencent par un motif commun. Je ne parle pas de la notation hongroise ici, mais si vous pensez aux espaces de noms / classes, alors beaucoup de symboles partageront en fait un préfixe commun .
Le problème est que lorsque vous effectuez une recherche binaire, les préfixes communs sont la pire chose avec laquelle vous pouvez vous retrouver, car vous finirez par comparer ces préfixes encore et encore.
En revanche, si vous regardez les cordes à l'envers, vous verrez beaucoup plus d'entropie! Et soudain, une recherche binaire (sur un Trie) devient beaucoup plus puissante!
C'est toujours un bug que les noms C ++ modifiés (par gcc) n'aient pas été inversés pour mettre l'espace de noms EN DERNIER :)
la source
Je retourne de temps en temps des numéros de téléphone et certaines chaînes de recherche
la source
La seule fois où je me souviens avoir vu l'inversion de chaîne utilisée était une fonction que j'ai vue en arrière qui l'a utilisée lors de l'analyse des noms de fichiers, pour s'assurer que le '.' il a trouvé dans le nom de fichier était en fait le dernier point qui séparait le nom de fichier de l'extension. c'est-à-dire, en analysant un nom de fichier comme
data.2010.12.08.dat
, vous inverseriez la chaîne, trouver le premier point, soustraire cette position de la fin de la chaîne d'origine et prendre la sous-chaîne. Je ne dis pas que c'est la façon optimale de le faire, mais c'est ce qu'il a fait. Il se peut que ce soit dans powerbuilder, où de telles utilisations bizarres des fonctions étaient courantes pour contourner divers problèmes non évidents.la source
La seule vraie appli mondiale que j'ai vue utiliser le strrev était de stocker les mots de passe des utilisateurs `` illisibles '' dans la base de données ...
Mais je me souviens qu'il y a un modèle en C pour utiliser le strrev, peut-être que j'y reviendrai plus tard.
la source