将字符串流解析为字符串和双打
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!
}
我正在编写一个程序,它在一行中接受输入,如下所示:
运行 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!
}