如何从 C++ 中的字符串中搜索和修改被某些模式包围的数字? [关闭]
Posted
技术标签:
【中文标题】如何从 C++ 中的字符串中搜索和修改被某些模式包围的数字? [关闭]【英文标题】:How could I search and modify numbers surrounded by certain patterns from a string in C++? [closed] 【发布时间】:2017-08-30 00:08:44 【问题描述】:我正在尝试处理具有随机大小的字符串,并修改由某些模式包围的所有数字。例如,
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”之类的模式并修改它们之间的数字。
谁能给我一些指导?
【问题讨论】:
也许std::regex
会派上用场。
您需要make an appointment with your rubber duck进行咨询。我相信你能从你的橡皮鸭那里得到一些好的建议。
您还应该仔细查看:cplusplus.com/reference/string/string,看看那里有什么可用的。
@zzxyz 请不要推荐这个参考。 en.cppreference.com 上提供了更好、更可靠的文档。
@user0042 10-4。这样看起来确实更好。
【参考方案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
【讨论】:
以上是关于如何从 C++ 中的字符串中搜索和修改被某些模式包围的数字? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何在标准函数 lambda c++ 11 中正确捕获参数包
如何在 C++ 中搜索 std::string 中的子字符串?