2016-07-11 5 views
-1

Ich bin aufgefordert, alle Ausrufe mit Punkten in einer Zeichenfolge zu ersetzen. Ich habe eine Funktion gefunden, aber ich bekomme einen Fehler, weil der letzte Ausruf nicht geändert wird. Es ist nur der letzte Ausruf.Ersetzen von Ausruf mit Punkt in einer Zeichenfolge

Der Eingang ist:

Wir werden unsere Suche im Raum fortsetzen. Es wird mehr Shuttle-Flüge und mehr Shuttle-Crews geben und, ja, mehr Freiwillige, mehr Zivilisten, mehr Lehrer im Weltraum. Nichts endet hier; Unsere Hoffnungen und unsere Reisen gehen weiter!

Meine Funktion ist:

string ReplaceExclamation(string text) 
{ 
string newText = text; 
int i, len = text.size(); 

for(i=0; i<len; i++) 
{ 

if(text[i] == '!') 
newText[i] = '.'; 
} 
return newText; 
} 

Weiß jemand, wie man es Hardcore, da es nur der letzte Ausruf ist. Dank

+4

Wie sieht die vollständige Funktion aus? Gibt es 'text' oder' newText' zurück? Wie nennst du diese Funktion? Können Sie bitte versuchen, ein [minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve) zu erstellen und uns zu zeigen? –

+0

Ich habe Ihren Code auf meiner Box versucht, es funktioniert gut: Wir werden unsere Suche im Weltraum fortsetzen. Es wird mehr Shuttle-Flüge und mehr Shuttle-Crews geben und, ja, mehr Freiwillige, mehr Zivilisten, mehr Lehrer im Weltraum. Nichts endet hier; Unsere Hoffnungen und unsere Reisen gehen weiter. – walker

+1

[kann nicht reproduziert werden] (http://coliru.stacked-crooked.com/a/1bfe589f6a9d170f) –

Antwort

3

können Sie verwenden, um die std::replace Algorithmus Funktion, um die Ausrufezeichen mit Punkten zu ersetzen:

std::replace(s1.begin(), s1.end(), '!', '.'); 

Stellen Sie sicher, gehören die <algorithm>-Header.

0

Die Längenfunktion der Zeichenfolgenbibliothek enthält nicht das Zeichen '\ 0' am Ende der Zeichenfolge. So können Sie versuchen, len + 1 als Ihre Endbedingung in Ihrer for-Schleife zu versuchen.

string ReplaceExclamation(string text) 
{ 
string newText = text; 
int i, len = text.size(); 

for(i=0; i<len+1; i++) 
{ 

if(text[i] == '!') 
newText[i] = '.'; 
} 
return newText; 
} 

Hoffe es hilft!

+0

Warum würde das helfen?Im besten Fall prüfen Sie den Null-Terminator und fügen eine zusätzliche Iteration plus Konfusion aus inkonsistenten Regeln zur Indizierung über die Länge hinzu. Im schlimmsten Fall verwenden Sie einen Dialekt von C++, in dem dies nicht definiertes Verhalten ist. – chris