您好?我想知道如何在字符串代码中找到数字。 这是我的c ++代码。
string firSen;
cout<<"write the senctence : "<<endl;
getline(cin,firSen);
int a=firSen.find("pizza");
int b=firSen.find("hamburger");
int aa=firSen.find(100);
int bb=firSen.find(30);
我想写
I want to eat pizza 100g, hamburger 30g!!
我想知道100和30地址。
我知道如何找到披萨和汉堡包地址。(这是正确的代码)
但我不知道如何找到数字..(我认为int aa = firSen.find(100); int bb = firSen.find(30);是错误的代码)
你能帮帮我吗?
答案 0 :(得分:2)
std::string::find()
功能会将std::string
或const char*
作为有效搜索键。
如果您要搜索&#39;通用数字&#39; ,您必须将它们转换为std::string
或使用const char*
字面值
size_type aa=firSen.find("100");
或
int num = 100;
size_type aa=firSen.find(std::to_string(num));
请参阅std::to_string()
函数参考
从您的输入示例中看,您事先并不知道数值,因此查找类似
的内容 size_type aa=firSen.find("100");
无用 您实际需要的是一些不错的解析器,它使您能够在某些关键字之后读取数值,这需要数字属性(例如样本中的 weight )。
最简单的方法是,找到您的关键字,例如"hamburger"
或"pizza"
,然后从找到的位置继续前进,找到下一个数字(&#39 ; 0-9&#39;),并从该位置提取数字。
使用std::regex中提议的@deeiip's answer,可能是您问题的简明解决方案。
答案 1 :(得分:1)
我会在你的情况下使用它(如果我只搜索一个数字,而不是一个特定的数字):
std::regex rgx("[0-9]+");
std::smatch res;
while (std::regex_search(firSen, res, rgx)) {
std::cout << res[0] << std::endl;
s = res.suffix().str();
}
这是使用c++11
的{{1}}标准代码。它的作用是:搜索任何数字的出现。这就是<regex>
的含义。它继续在你的字符串中搜索这个模式。
这个解决方案只应该在我不知道我期望的数字时使用,否则它会比其他提到的解决方案贵得多。