2017-08-30 35 views
-4

我想处理一个随机大小的字符串,并修改所有包围某些模式的数字。例如,如何搜索和修改C++中某个字符串所包围的数字?

string oldstring =“res 0.25 cap 0.12 tra 1 res 0.3 cap”; string 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 
相关问题