如何在字符串中搜索数字?

时间:2014-11-19 16:36:02

标签: c++ string

您好?我想知道如何在字符串代码中找到数字。 这是我的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);是错误的代码)

你能帮帮我吗?

2 个答案:

答案 0 :(得分:2)

std::string::find()功能会将std::stringconst 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>的含义。它继续在你的字符串中搜索这个模式。


这个解决方案只应该在我不知道我期望的数字时使用,否则它会比其他提到的解决方案贵得多。