Ich versuche, eine Zeichenfolge mit dem folgenden Code zu umkehren:Kann nicht neue Linie verarbeiten ' n' Trennzeichen in einem String
string reverseStringHelper(const char* s, bool flag) {
if(*s == '#') {
return "";
}
if(flag) {
return reverseStringHelper(s+1, 0) + *s + "\0";
} else {
return reverseStringHelper(s+1, 0) + *s;
}
}
string reverseString(string s) {
s = s+'#';
return reverseStringHelper(s.c_str(), 1);
}
I arbeitet für Testfälle perfekt wie: "Hello"
, "Hello World"
Aber scheitert an Fällen wie:
"Hello World
New World!"
Warum kann das jemand erklären?
Versuchen Sie es mit einer kürzeren Zeichenfolge (es gibt also nicht so viele rekursive Aufrufe), und treten Sie dann durch den Code in einem Debugger und treten Sie in die rekursiven Aufrufe. Überprüfen Sie die Werte von 's' und' * s' und was der vorherige rekursive Aufruf zurückgegeben hat (möglicherweise möchten Sie temporäre Variablen verwenden, um das Ergebnis zu speichern, um einfacher debuggen zu können). –
Können Sie erklären, wie es scheitert? – Sean
Ich kenne die C++ - Standardbibliothek nicht, aber erzeugt 'str +' \ 0 "' einen anderen Wert als 'str' (mit' string str; ')? – axiac