将变量与C ++中的数据类型进行比较

时间:2013-10-30 18:57:23

标签: c++ string io getline stdstring

我想知道是否有一种简洁的方法可以将变量与数据类型进行比较。

以下示例不是一段有效的代码,但注释和注释下面的代码应该解释我的问题:

string inputString = "";
float inputFloat = 0.0;

cout << "Input a string: ";

getline(cin, inputString);
stringstream(inputString) >> inputFloat;

// Is there a way to compare a float variable to a string or float data type? 
if(inputFloat == string) { 
    cout << "inputFloat is not a float" << endl;
} else if(inputFloat == float) {
    cout << "inputFloat is a float!" << endl;
}

2 个答案:

答案 0 :(得分:1)

下面:

stringstream(inputString) >> inputFloat;

执行此操作时,您正在调用operator>>(istream, float),因此您要么成功读取浮点数,要么失败并且不加载任何内容。您可以检查stringstream对象上的.fail()以验证它。

由于您正在调用operator>>的特定重载,因此您不可能将“不同类型的变量”加载到inputFloat变量中,或类似的任何内容。

答案 1 :(得分:0)

您需要的只是简单检查std::getlineoperator>>的返回值:

std::cout << "Input a string: ";
std::string inputString = "";
float inputFloat = 0.0;
if (std::getline(std::cin, inputString) && 
    std::istringstream(inputString) >> inputFloat)  {
    std::cout << "Succesfully read float: " << inputFloat;
}
else {
    // TODO: either getline failed to read string or >> failed to extract float
}

请注意std::istringstream(inputString) >> inputFloat构造一个临时字符串流,并使用专门设计的>>的适当重载来从中提取float值。另外,检查返回值可确保在输出inputFloat时,已成功从流中检索它并包含有效值。