我正在用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。 但问题出在两个案例中
是否存在可以提取浮子的解决方案,无论浮子的位置或数量如何?
由于
答案 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}
。