我如何从 C++ 中的字符串中搜索和修改被特定模式包围的数字?
How could I search and modify numbers surrounded by certain patterns from a string in C++?
我正在尝试处理一个随机大小的字符串,并修改所有被特定模式包围的数字。例如,
字符串旧字符串="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" 这样的模式并修改它们之间的数字。
谁能给我一些指导?
你可以试试这个:
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
我正在尝试处理一个随机大小的字符串,并修改所有被特定模式包围的数字。例如,
字符串旧字符串="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" 这样的模式并修改它们之间的数字。
谁能给我一些指导?
你可以试试这个:
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