2017-08-30 28 views
-4

ランダムなサイズの文字列を処理しようとしていて、特定のパターンで囲まれたすべての数字を修正しようとしています。例えば、C++の文字列から特定のパターンに囲まれた数字を検索および修正するにはどうすればよいですか?

文字列oldstring = "res 0.25 cap 0.12 tra 1 res 0.3 cap"; 文字列newstring = "res 0.50 cap 0.12 tra 1 res 0.6 cap";

"res"と "cap"の間の数字に2を掛けました。 特定の部分文字列(stringstream、token、whileループ、getlineを使用して検索する方法)のみ知っていますが、 「res ... cap」のようなパターンを検索し、それらの間の数を変更します。

誰でも私にいくつかの指導を与えることができますか?

+1

多分 'のstd :: regex'が便利になることができました。 – user0042

+0

相談のために[あなたのラバーダックとの予約](https://en.wikipedia.org/wiki/Rubber_duck_debugging)が必要です。私はあなたがあなたのラバーアヒルから良いアドバイスを受けることができると確信しています。 –

+0

また、http://www.cplusplus.com/reference/string/string/をよく見て、そこにあるものを確認してください。 – zzxyz

答えて

1

あなたはこれを試すことができます。

int main() 
{ 

    string s = "res 0.25 cap 0.12 tra 1 res 0.3 cap"; 
    vector<string>split_string; 
    string current; 
    for (int i = 0; i < s.length(); i++) 
    { 
    if (s[i] != ' ') 
    { 
     current += s[i]; 
    } 
    else 
    { 
     split_string.push_back(current); 
     current = ""; 
    } 
    } 

    vector<string>final_data; 
    for (string i:split_string) 
    { 
    if (i.find('.') != string::npos) 
    { 
     double new_val = stod(i); 
     double new_val1 = new_val*2; 
     string final_val = to_string(new_val1); 
     final_data.push_back(final_val); 

    } 
    else 
    { 
     final_data.push_back(i); 
    } 
    } 

    string final_string; 
    for (string i: final_data) 
    { 
     final_string += i; 
     final_string += " "; 
    } 
    cout << final_string << endl; 

    } 

} 

最終出力:

res 0.500000 cap 0.240000 tra 1 res 0.600000 
関連する問題