如何从 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++ 中修改矩阵中的某些列

Go 语言入门很简单:正则表达式

如何在 C++ 中搜索 std::string 中的子字符串?

在 C++ 中查找传入字符串中的模式(包括像°这样的特殊字符)

使用 C++ 查找文件中的所有重复模式