2017-08-30 39 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 
相關問題