In PHP ist es das strrev()
, in Rails ist es das .reverse
, aber die meisten Sprachen haben keine String-Reverse-Funktion. Einige haben Array-Umkehrfunktionen, die für Zeichen verwendet werden können. Ich dachte, das müsste ein großes Versehen sein, aber dann kam mir der Gedanke, wofür würdest du eigentlich die umgekehrte Zeichenfolge verwenden?
Ich kann nur denken, dass ich es in Demos und Lektionen gesehen habe, um "Hello World!" in "! dlroW olleH".
Meine Frage ist; Gibt es eine Verwendung zum Umkehren einer Zeichenfolge oder ist es völlig sinnlos?
.
Nachtrag
Es gab viel mehr Antworten, als ich erwartet hatte, und nicht alle waren rein akademisch. Ich hätte Geld investiert, das niemand mit einem legitimen Beispiel versehen könnte. Ich hätte auch nicht gedacht, dass ich etwas Neues lernen würde, aber Mark Canlas 'Regex-Vorschlag ist einfach genial und ich freue mich darauf, dass er sich bewähren kann. Dank an alle.
quelle
a ^= b; b ^= a; a ^= b;
Antworten:
Sexeger
Manchmal können Probleme mit regulären Ausdrücken einfacher geschrieben werden, indem die Eingabezeichenfolge umgekehrt und das Problem auf andere Weise gelöst wird.
Technik mit freundlicher Genehmigung des Mannes, der mir Perl beigebracht hat.
Sexeger auf PerlMonks
quelle
Nun, das ist eine humorvolle Antwort.
"Damals" besaß ich eine Unix-Box mit einer bestellten Wörterbuchdatei mit englischen Wörtern, die für die Rechtschreibprüfung verwendet wurde.
Ich habe eine neue Datei erstellt, indem ich alle Wörter im Wörterbuch umgedreht, sortiert und dann wieder umgedreht habe. Das Ergebnis war eine Liste von Wörtern, die von rechts nach links sortiert waren.
Wenn Sie also nach einem Wort suchen, werden neben diesem Wort Wörter mit ähnlichen Endungen angezeigt. So war es einfach, kleine Gedichte zu machen!
Sie können sich wirklich amüsieren, wenn Sie sehen, was sich mit was reimt.
quelle
Ich bin seit ~ 10 Jahren ein Programmierer / Entwickler / Systemadministrator und kann mich nicht erinnern, jemals in realen Situationen einen Stringwechsel benötigt zu haben.
Der einzige unmittelbare Anwendungsfall, an den ich denken kann, ist die Konvertierung auf der Basis von Zahlen: Wenn die Prozedur naiv durchgeführt wird, wird eine umgekehrte Zeichenfolge zurückgegeben. Mit ein wenig Mathematik können Sie jedoch den benötigten Speicherplatz im Voraus berechnen, sodass Sie den Puffer vom Ende an füllen können.
quelle
memmove
bis zum Anfang verwenden. Es ist wahrscheinlich billiger als log (n) / log (base) zu berechnen, um die Anzahl der erforderlichen Stellen zu berechnen.quelle
0
bis iterierenn/2
und den Charakter am anderen Ende vergleichen.while ( (*p == *q) && (p <= q) {p++; q--} return p > q;
in C und anderen Zeigersprachen.Interviews!
Das Umkehren eines Strings (an Ort und Stelle oder nicht) ist eine sehr häufige Interviewfrage für grundlegende Programmierkenntnisse. Eine Sprache ohne diese eingebauten Funktionen wäre schwierig zu interviewen. Der Kandidat müsste eigentlich etwas wissen. 1
1: Dies ist eine humorvolle Antwort.
quelle
Ich habe Situationen erlebt, in denen eine Desktop-Anwendung mit eingebetteten Geräten sprach und die Endianität in Byte-Reihenfolge ständig wechselte und Daten als Zeichenfolgen verschoben wurden. Das ist es aber für mich.
Ich hätte für diese Anwendung keine Strings verwendet, aber so war es auch .....
quelle
Nicht die beste Lösung, um eine E-Mail-Adresse zu verschleiern, da sie beim Hinzufügen zur Zwischenablage immer noch umgekehrt ist. Und wenn es populär würde, würde es bald von E-Mail-Scraping-Bots entdeckt werden.
Trotzdem wurde es vorgeschlagen .
quelle
ASCII ist nicht die beste Kodierung für genetische Informationen (Sie können die Basistypen ACGT als 2bits packen). Packen Sie sie in eine Reihe von Longlongs und Sie erhalten 32 genetische "Buchstaben" pro Wort. DNA kann sich umdrehen, so dass Sie einen DNA-Block mit beiden Kopien einer Testsequenz vergleichen müssen. Die Möglichkeit, einen gepackten String mit 2-Bit-Mengen umzukehren, kann für verschiedene Arten der genetischen Analyse sehr nützlich sein.
Ich hatte als Gegenstand einen Benchmark für Spionageagenturen, wie schnell man die Bits lange umkehren kann (eigentlich eine sehr lange Reihe von Long-Longs). Die offensichtliche Methode zum Austauschen von 2bits auf einmal ist viel langsamer als die weniger offensichtlichen Methoden. Diese beziehen sich auf einige der sauberen Algorithmen für die In-Place-Array-Transposition.
Tangurena: Die Operation, auf die Sie sich beziehen, wird als Bevölkerungszahl bezeichnet. Ähnliche Wünsche für Bit-gepackte Daten sind eine führende und eine nachfolgende Nullzählung. Es gibt viele wirklich nette Dinge, die man mit Bit-gepackten Daten machen kann. Eine einzelne Operation auf einer langen Strecke umfasst 64-Wege-Daten parallel. Wenn Sie also wissen, was Sie tun, können Sie für bestimmte Arten von Berechnungen eine unglaubliche Leistung erzielen.
quelle
Alles, wo es einfacher ist, mit der umgekehrten Saite zu arbeiten.
Das Arbeiten mit Ganzzahlen als Zeichenfolgen ist viel einfacher, wenn die Zeichenfolgen umgekehrt werden. Ich habe einige Bibliotheksfunktionen zum Rechnen mit großen ganzen Zahlen erstellt und die Stringumkehr verwendet, um die arithmetischen Funktionen zu vereinfachen.
Zugegeben, ich habe es nur verwendet, um Antworten auf Project Euler zu finden, aber die ursprüngliche Prämisse ist immer noch gültig.
quelle
Möglicherweise kostengünstige mehrsprachige Unterstützung für Sprachen, die Buchstaben von rechts nach links verwenden (z. B. Arabisch), anstatt von links nach rechts. Natürlich muss man auf Akzentzeichen achten, die das richtige Zeichen modifizieren ...
quelle
Ich weiß nicht, vielleicht hat jemand ein brennendes Bedürfnis, nach Palindromen zu suchen ...
Ich denke nicht, dass es völlig nutzlos ist, da es durchaus Situationen geben kann, in denen man in der Lage sein muss, eine Saite umzukehren.
quelle
Bei der Verarbeitung und Analyse natürlicher Sprache ist es manchmal einfacher, eine Zeichenfolge vom Ende bis zum Anfang zu suchen. Ein String-Reverse wäre nützlich zum Debuggen oder als alternative Methode zum Schreiben der Schleife (kehren Sie den String um und schleifen Sie dann von Index 0 nach n-1).
Außerdem werden einige Sprachen von rechts nach links geschrieben, sodass ein String-Umkehrer verwendet werden kann, wenn Sie sich in einer Umgebung befinden, in der LTR / RTL-Sprachen von Haus aus nicht erkannt werden.
Eine Zeichenfolge (in einigen Sprachen) besteht aus einer Reihe von Zeichen, kann aber auch aus Gehaltsschecks oder Inventarmodifikationen bestehen. In einer Schleife, die diese durchläuft, können Sie einige Berechnungen durchführen, die unabhängig von der Reihenfolge, in der Sie sie verarbeiten, gleich sein sollten. Ein perfekter Cromulent-Unit-Test wäre, zu prüfen, ob die Berechnungen vorwärts oder rückwärts gleich sind. Dies könnte für die Hinzufügung trivial offensichtlich sein, möglicherweise nicht für andere undurchsichtigere Operationen.
quelle
Für Compiler?
Es ist amüsant, aber die meisten Symbole in einer Sprache beginnen mit einem gemeinsamen Muster. Ich spreche hier nicht von ungarischer Notation, aber wenn Sie an Namespace / Klassen denken, dann haben viele Symbole tatsächlich ein gemeinsames Präfix .
Das Problem ist, dass bei einer binären Suche häufig verwendete Präfixe das Schlimmste sind, mit dem Sie enden können, da Sie diese Präfixe am Ende immer wieder vergleichen.
Wenn Sie sich die Saiten jedoch rückwärts ansehen, werden Sie viel mehr Entropie sehen! Und dann wird plötzlich eine binäre Suche (über einen Trie) viel leistungsfähiger!
Es hat mich immer gestört, dass C ++ entstellte Namen (von gcc) nicht umgekehrt wurden, um den Namespace LAST zu setzen :)
quelle
Ich drehe von Zeit zu Zeit Telefonnummern und bestimmte Zeichenfolgen für die Suche um
quelle
Das einzige Mal, an das ich mich erinnern kann, dass die Umkehrung von Zeichenfolgen verwendet wurde, war eine Funktion, die ich vor langer Zeit beim Analysieren von Dateinamen verwendet habe, um sicherzustellen, dass das '.' Es war in der Tat der letzte Punkt, der den Dateinamen von der Endung trennte. Wenn Sie einen Dateinamen wie folgt analysieren
data.2010.12.08.dat
, kehren Sie die Zeichenfolge um, suchen den ersten Punkt, subtrahieren diese Position vom Ende der ursprünglichen Zeichenfolge und nehmen die Teilzeichenfolge. Ich sage nicht, dass dies der optimale Weg ist, aber genau das hat es getan. Möglicherweise gab es Powerbuilder, bei denen es häufig vorkam, dass Funktionen so seltsam eingesetzt wurden, um verschiedene nicht offensichtliche Probleme zu umgehen.quelle
Die einzige echte worls-App, die ich mithilfe von strrev gesehen habe, war das Speichern von Benutzerpasswörtern, die nicht lesbar sind, in der Datenbank ...
Aber ich kann mich daran erinnern, dass es in C ein Muster gibt, mit dem man die strrev verwenden kann. Vielleicht habe ich es später herausgefunden.
quelle