2016-07-11 16 views
-1

すべての感嘆符を文字列のドットで置き換えるように求められます。私は関数を思いついたが、それは最後の感嘆符を変更しないので、エラーが発生している。それはちょうど最後の感嘆符です。感嘆符を文字列のドットに置き換える

入力は:

私たちは宇宙での探求を続けます。より多くのシャトル便とより多くのシャトルクルーと、より多くのボランティア、より多くの一般市民、より多くの宇宙教師がいるでしょう。何もここで終わらない。私たちの希望と私たちの旅は続きます!

My機能は次のとおりです。

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; 
} 

誰もがそれだけで最後に感嘆だから、それをハードコアする方法を知っています。 おかげ

+4

完全な機能はどのように見えますか? 'text'か' newText'を返しますか?どのようにこの機能を呼びますか?あなたは、[最小、完全で、かつ実証可能な例](http://stackoverflow.com/help/mcve)を作成して私たちを見せてください。 –

+0

私の箱にあなたのコードを試しましたが、うまくいきます: 私たちは宇宙での探求を続けます。より多くのシャトル便とより多くのシャトルクルーと、より多くのボランティア、より多くの一般市民、より多くの宇宙教師がいるでしょう。何もここで終わらない。私たちの希望と旅は続きます。 – walker

+1

[再現できません](http://coliru.stacked-crooked.com/a/1bfe589f6a9d170f) –

答えて

3

あなたはドットで感嘆符文字を置き換えるためにstd::replaceアルゴリズムの機能を使用することができます。

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

あなたが<algorithm>ヘッダを含めることを確認してください。

0

文字列ライブラリの長さ関数には、文字列の末尾に '\ 0'文字は含まれません。ですから、forループの終了条件としてlen + 1を試すことができます。

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; 
} 

希望すると助かります!

+0

これはなぜ役立つのでしょうか?最高でも、ヌルターミネータをチェックしていて、余分な繰り返しと、長さを超えたインデックスについての矛盾したルールからの混乱を追加しています。最悪の場合、これは未定義の動作であるC++の方言を使用しています。 – chris

関連する問題