2016-04-28 6 views
-1

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?

+0

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). –

+1

Können Sie erklären, wie es scheitert? – Sean

+0

Ich kenne die C++ - Standardbibliothek nicht, aber erzeugt 'str +' \ 0 "' einen anderen Wert als 'str' (mit' string str; ')? – axiac

Antwort

3

Ich bin mir nicht sicher, warum Sie hinzufügen den # Charakter als c_str werden Sie auf einen Null-terminierten String einen Zeiger geben, aber wenn Sie eine C++ freundliche Art und Weise wollen einen String umkehren nur rbegin und rend:

std::string text = "Hello, world"; 
std::string reversed(text.rbegin(), text.rend());