2012-03-12 37 views
0

文字列をベクトル文字列に置き換えます。つまり、私はベクトル文字列を持っており、次のような情報でベクトルtmpbackを定義しています:name_lastname_phonenumber文字列をベクトル文字列に置き換えます。

私はいくつかの姓を置き換えたいと思います。たとえば、誰かがjohn_smith_5551234の場合は、smithをsmith100に置き換えます。

これの一部O、私のコードである:

vector<string> tmpback = names; 
for (Int_t i = 0; i < tmpback.size(); i++) { 
    replace(tmpback[i].begin(),tmpback[i].end(),"smith", "smith"+number); 
} 

(iはINT_T番号= 0として以前に番号を定義し、後でいくつかの値を与えます)。 誰かが私が間違っていることを知っていましたか?

おかげ

+1

'置き換える()[I] .END(tmpback、...、...);' – perreal

+0

申し訳ありませんが、タイプミスエラー – Alejandro

+0

number' 'の定義を示してください、それがのstd ::文字列です。 ? –

答えて

0

私の即時の反応はなぜ疑問に思うだろうあなたはこの状況に自分自身を置いています。 3つの別々の項目を文字列にジャムするのではなく、その文字列の部分を操作するのではなく、構造体を作成して各部分を個別に処理できるのはなぜですか?

struct person { 
    std::string first_name; 
    std::string last_name; 
    int record_no; 
    std::string phone_number; 
}; 

この方法では、代わりに最後の名前の最後にレコード番号(または正確に何でもあなたの「100」が表す)を仮止めの、あなたはそれに独自のフィールドを与え、そして必要に応じて適切な数を記述します。

vector<person> tmpback; 

for (int i=0; i<tmpback.size(); i++) 
    tmpback[i].record_no = number; 
+0

@ Jerryさんに感謝します。実際に私は誰かのコードを変更しています。しかし、はい、それはより合理的に聞こえる。やってみます。 – Alejandro

1

std::replaceは、他の配列を有する配列を置き換えることはありません。単一の要素を他の単一の要素に置き換えます。それ以外に、数字を文字列に追加する方法は機能しません。

は、数値を文字列に変換するためboost::lexical_castまたはstd::to_string(C++ 11のみ)のいずれかと共にboost::replace_first又はboost::replace_allを試してみてください。

using namespace boost; 
std::string replace_str = std::string("smith") + lexical_cast<std::string>(number); 
replace_first(tmpback[i], "smith", replace_str); 

また、サブ文字列を検索し、あなたがそれを見つけた場合、それは後に(文字列に変換)番号を挿入できます。

std::string::size_type pos = tmpback[i].find("smith"); 
if (pos != std::string::npos) 
{ 
    // adding 5 because that's the length of "smith" 
    tmpback[i].insert(pos + 5, std::to_string(number)); 
} 
+0

助けてくれてありがとう@Benjamin、私はこのエラーがあります:' Error:Symbol lexical_castは現在のスコープ名で定義されていません.C:400: Error :シンボル文字列が現在のスコープに定義されていません。 400行目が2行目です。 – Alejandro

+0

@Alejandro: 'lexical_cast'は私が提供したリンクが示すように、boostからです。その方法を使うには、まずboostをインストールする必要があり、 ''をインクルードする必要があります。あなたが辛抱している場合は、数値を標準ライブラリで使用可能な文字列に変換するために使用できる他の方法があります。最初に 'std :: to_string'を試してください。しかし、私が言ったように、それはC++ 11モードでのみ利用可能です。それがうまくいかなければ、ストリングストリームに頼らざるを得なくなります。ストリングストリームはちょっと面倒です。 –

関連する問題