2012-03-15 20 views
0

文字列の文字を置き換えるのにこのコードを使用していますが、それはうまくいきますが、最初に保持する必要がある文字は削除されます。私は文字列の中央に*だけ必要ですが、この問題は私を困らせました。私はベクトル文字列文字列の途中で置換C++

textWords[i].replace(pos, 2 , 1 , '*'); 

すべての単語は3文字の長さで、それは常にだけでなく、最初の文字を取り除くには、中央の文字を置き換えます。 replace関数はベクトルに使用されているものです。私はそれを書かず、posは以下のコードで定義されています。

size_t pos = textWords[i].find(bannedWords[j]); 

助けてください。

+0

だから、あなたは正確に何をしたいですか? "bar"が禁止された単語の場合。リプレース機能を使用した場合、どのようになりますか? "b * r"? – mfontanini

+0

@fontaniniはい、それはb * rに終わるはずですが、現在は* rのように最初の文字がないように見えます。 – bobthemac

+0

私の答えをチェックして、私はそれが動作すると思います。 – mfontanini

答えて

3

私はあなたがアスタリスクで各禁止単語から2番目の文字を置き換えるためにしようとしていると信じています。あなたはSTDを呼び出す必要があります::文字列::これらの引数を使用して置き換えます。

textWords[i].replace(pos + 1, 1, 1 , '*'); 

この方法であなたは番目の文字(POS + 1)を除去し、1個のアスタリスクとそれを交換します。

EDIT:@Danが指摘したように、あなたはまた、単に文字を割り当てることができます。

textWords[i][pos + 1] = '*'; 
+0

そのような単純な解決策を完璧に働いてくれてありがとう。なぜ私はそれを考えなかったのか分からない。 – bobthemac

1

置換パラメータの2番目の引数は、削除する文字数を指定します。 1に変更し、それはあなたが欲しいものを行う必要があります。

textWords[i].replace(pos, 1 , 1 , '*'); 
+0

私はそれを試して、それは最初の文字を取り除き、最後の2つを残します。私はそれが私が交換したいセンターレターであることははっきりしていないかもしれません。 – bobthemac