从c ++中的一行字符串中提取数字

时间:2015-04-13 14:04:14

标签: c++ string stream extract stringstream

我正在用C ++制作一个自然语言计算器。用户将输入一行字符串进行计算。程序将提取数字和操作并相应地应用它。以下是我的代码的一部分

#include<iostream>
#include<string>
#include<sstream>
using namespace std;

int main()
{
    string inp;
    float n1,n2;
    string s1,s2;

    cout<<"Enter your string"<<endl;
    getline(cin,inp);

    stringstream ss;
    ss.str(inp);

    ss>>s1>>n1>>s2>>n2;
}

如果用户以正确的格式输入,程序将成功运行,即添加2和3,从12减去8。 但问题出在两个案例中

  1. 如果用户输入其他格式,例如“7 plus 6”。
  2. 即使格式正确,但只有一个数字“25的平方根”。
  3. 是否存在可以提取浮子的解决方案,无论浮子的位置或数量如何?

    由于

1 个答案:

答案 0 :(得分:0)

如果您想要做的事情是从字面上提取float,您可以利用std::stof可以额外返回它离开的地方这一事实,您可以使用它来确定是否整个“word”是float(例如“6c”),并且invalid_argument抓住绝对不是浮点数的单词(例如“plus”):

std::vector<float> getFloats(const std::string& s) {
    std::istringstream iss(s);
    std::string word;
    std::vector<float> result;

    size_t pos = 0;
    while (iss >> word) {
        try {
            float f = std::stof(word, &pos);
            if (pos == word.size()) {
                result.push_back(f);
            }   
        }   
        catch (std::invalid_argument const& ) { 
            // no part of word is a float
            continue;
        }   
    }   

    return result;
}

有了这个,getFloats("7 plus 6")会产生{7, 6}getFloats("square root of 25")会产生{25}