Umkehren einer Zeichenfolge ohne Verwendung von Reverse. Es funktioniert, aber warum?
Ok, also ein Freund von mir bat mich, ihm zu helfen mit einem string-reverse-Methode, die wiederverwendet werden können, ohne mit String.Reverse (es ist eine Hausaufgabe für ihn). Nun, ich habe, unten ist der code. Es funktioniert. Prächtig sogar. Offensichtlich, indem es bei der Suche können Sie sehen, die größer die Zeichenfolge-je länger die Zeit, die es braucht, um zu arbeiten. Aber meine Frage ist, WARUM funktioniert es? Programmieren ist eine Menge von Versuch und Irrtum, und ich war mehr pseudocoding als die eigentliche Kodierung und es hat funktioniert lol.
Kann mir jemand erklären, wie genau reverse = ch + Rückseite; funktioniert? Ich verstehe nicht, was macht es Umgekehrt :/
class Program
{
static void Reverse(string x)
{
string text = x;
string reverse = string.Empty;
foreach (char ch in text)
{
reverse = ch + reverse;
//this shows the building of the new string.
//Console.WriteLine(reverse);
}
Console.WriteLine(reverse);
}
static void Main(string[] args)
{
string comingin;
Console.WriteLine("Write something");
comingin = Console.ReadLine();
Reverse(comingin);
//pause
Console.ReadLine();
}
}
Was du im Grunde tust, ist das einfügen von einzelnen Buchstaben von der original-string an position 0 in der neuen Zeichenfolge.
Was ist daran nicht zu verstehen? Sie nehmen Zeichen von der Vorderseite von
x
und stellen Sie das Ergebnis reverse
- so abc
wird (a
bc
), (ba
c
) (cba
`)Ich habe schon für so etwas wie 32 Stunden, also hatte ich keine Ahnung, wie es funktioniert...für mich war es eine jener Situationen, dass es einfach funktioniert und ich war zufrieden mit dem unmittelbaren Ergebnis, da war es buchstäblich nur mir, versuche pseudocode Sie es aus, bevor ich tatsächlich etwas geschrieben. Ich hatte erwartet, müssen Sie ein array lol.
Sollten Sie verwenden
StringBuilder
da die Verkettung von strings ist teuer.InformationsquelleAutor Randy E | 2013-06-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn der string Durchlaufen ist "Hallo", wird der loop um dies zu tun:
reverse
= 'h' +string.Empty
reverse
= 'e' + 'h'reverse
= 'l' + 'eh'bis es gleich
olleh
InformationsquelleAutor Colm Prunty
Wenn Ihr string ist
My String
, dann:Nimmst du jeden char und sagen "das Zeichen und das Heften, was ich vor hatte nach es".
InformationsquelleAutor DonBoitnott
Bitte stellen Sie sich, dass Sie Eingang Zeichenfolge "abc". Danach können Sie sehen, die Buchstaben sind genommen eins nach dem anderen und fügen Sie zu Beginn des neuen string:
InformationsquelleAutor Piotr Czarnecki
Ich denke, dass Ihre Frage beantwortet wurde. Meine Antwort geht über die unmittelbare Frage, sondern vielmehr, um den Geist der übung. Ich erinnere mich, dass Sie diese Aufgabe vor vielen Jahrzehnten in der Schule, als Speicher-und mainframe - (Huch!) Bearbeitungszeit wurde mit einer Prämie. Unsere Aufgabe war es, reverse ein array oder string ist ein array von Zeichen, ohne ein 2. array oder string. Der Geist der übung war, zu lehren, achtsam zu sein mit den verfügbaren Ressourcen.
In .NET, ein string ist ein immutable-Objekt, also ich muss einen 2. string. Ich schrieb bis zu 3 weitere Beispiele zeigen verschiedene Techniken, die möglicherweise schneller sein, als deine Methode, aber das sollte nicht sein verwendet, um zu ersetzen die integrierte .NETTO-Ersetzen-Methode. Ich bin teilweise zu den letzten.
Ich habe gerade getestet verschiedene Methoden. Meine Reverse4 () - Methode ist bei weitem die Schnellste. Es ist etwa doppelt so schnell wie rückwärts zu gehen durch die ursprüngliche Zeichenfolge und anfügen an ein "StringBuilder" - Objekt, das das äquivalent von @CodeCamper ist ReverseFast Methode.
InformationsquelleAutor Rick Davin
Testen, der Vorschlag von Romoku mit
StringBuilder
ich produziert habe, den folgenden code.Auf meinem computer, dies sind die Geschwindigkeiten, die ich bekomme pro Menge von alphabet(s).
100 ABC(s)
Reverse ~5-10ms
FastReverse ~5-15ms
1000 ABC(s)
Reverse ~120ms
FastReverse ~20ms
10000 ABC(s)
Reverse ~16,852 ms!!!
FastReverse ~262ms
Diese Zeit, die Ergebnisse variieren stark je nach computer, aber eine Sache ist sicher: wenn Sie die Verarbeitung von mehr als 100k Zeichen, die Sie für wahnsinnig, nicht mit
StringBuilder
! Auf der anderen Seite, wenn Sie die Bearbeitung weniger als 2000 Zeichen, die den Aufwand von derStringBuilder
scheint bestimmt, um aufzuholen mit Ihrer Leistung steigern.Jederzeit!
StringBuilder
ist wirklich nutzlos für einen kleinen Satz. Aber nehmen wir an, der user wollte umkehren, Encyclopædia Britannica, Sie wäre wirklich krank fühlen für nicht mitStringBuilder
!InformationsquelleAutor CodeCamper