我正在编写一个程序,在一行上输入如下:
运行10.1 50.2
其中“Run”是一个字符串,其余部分是双精度数。科学记数法和负数也可以用作双输入:例如-5.88e-11(标准C ++库允许这样)。
这是我尝试过的初始代码。
string command;
double input1;
double input2;
getline(cin,input);
stringstream ss(input);
ss >> command >> input1 >> input2;
这种方法的问题在于,如果在double的位置输入空格或字母,则stringstream的输出将为0.我相信这是因为在C ++中没有用于double的null持有者。
我尝试的另一种方法是将每个输入作为字符串读取,检查字符串是否为数字并将其转换为double。然而,当可以输入科学记数法和否定词时,这变得复杂。尝试这个:
for (int i=0; input1[i]; i++){
if (isdigit(input1[i])){\
isDigit = true;
}else{
isDigit = false;
}
}
如何在同一行上用字符串和字母数字双精度解析此输入? (同时保留否定词和科学记数法)
谢谢!
答案 0 :(得分:1)
直接使用std::cin
并检查解析流是否有任何错误。
std::string command;
double arg1, arg2;
if (std::cin >> command >> arg1 >> arg2) {
std::cout << command << std::endl;
std::cout << arg1 << std::endl;
std::cout << arg2 << std::endl;
} else {
// error!
}