将字符串流解析为字符串和双打

Parse a stringstream into strings and doubles

我正在编写一个程序,它在一行中接受输入,如下所示:

运行 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;

这种方法的问题是,如果输入空白 space 或字母代替 double,字符串流的输出将为 0。我相信这是因为没有空值持有者对于 C++ 中的 double。

我尝试的另一种方法是将每个输入作为字符串读取,检查字符串是否为数字并将其转换为双精度数。然而,当可以输入科学记数法和负数时,这就变得复杂了。尝试这样做:

for (int i=0; input1[i]; i++){
    if (isdigit(input1[i])){\
        isDigit = true;
    }else{
        isDigit = false;
    }
}

如何在同一行中解析此输入的字符串和字母数字双精度数? (同时保留负数和科学记数法)

谢谢!

直接使用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!
}