将字符串流解析为字符串并加倍

时间:2015-10-15 04:03:08

标签: c++ string parsing input stringstream

我正在编写一个程序,在一行上输入如下:

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

如何在同一行上用字符串和字母数字双精度解析此输入? (同时保留否定词和科学记数法)

谢谢!

1 个答案:

答案 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!
}