cin:检查number是一个整数还是float,即使float值是1.000

时间:2013-03-17 06:04:55

标签: c++ string floating-point integer cin

使用std :: cin>>以下列方式编号:

float number;
while(std::cin >> number) {
     //perform a check here if possible

    //if number does not contain a decimal point do this
    for(int i = 0; i < number; i++) {
        std::cin >> readMoreFloats; 
    }
    //otherwise read 1000 more floats
}

有没有办法区分以下类型的行:

1.500 (1000 more floats)
2 2.000 2.000

这些行将以float或int开头。如果行以float开头,我想读1000多个浮点数。如果它是一个int,我想读取那个浮点数。我知道我可以将float转换为int并检查casted int是否等于float,但是当float具有平坦值(例如1.000)时,这将不起作用。

我更喜欢不使用getline()来读取整行,因为在后面分割它是非常耗时的,而且我已经知道所有的输入都是浮点数,除了可能是第一个数字。另一种方法是将每行的第一个值作为字符串读入,并检查它是否包含句点。有没有一种方法,没有先读取输入作为字符串,检查这个?或者是需要的字符串步骤。

4 个答案:

答案 0 :(得分:4)

你真的需要把它作为字符串来读取来检查是否有点?

为什么不先取整数?

int intNum = 0; char ch;

cin >> intNum;
cin.get(ch);     

现在你可以使用另一个整数读取&amp;如果有一个点,即ch=='.'

,则组合成一个浮点数

答案 1 :(得分:0)

搜索点,如果它们是字符串,则将其解析为。

答案 2 :(得分:0)

这样做的一种方法是以字符串形式读取第一个字段,然后测试它是否包含小数位。如果是这样,那么将其投入浮动并阅读更多内容。否则,将其转换为整数并读取那么多。这很好用,因为cin也会自动在字符串的空格处断开。

我认为以下代码应该是关于工作的:

#include <iostream>
#include <string>
int main()
{

    std::string myStr;
    std::cin >> myStr;

    float myVal = 0;

    if(myStr.find('.') != std::string::npos)
    {
        std::cout << "Is floating point, now convert this and read lots.\n";
        float myFloat = atof(myStr.c_str());
        for(int k =0; k < 1000; k++)
        {
            std::cin >> myVal;
        }
    }
    else
    {
        std::cout << "Is integer, so read just that many\n";
        int myInt = atoi(myStr.c_str());

        for(int k =0; k < myInt; k++)
        {
            std::cin >> myVal;
        }

    }

    return 0;
}

答案 3 :(得分:0)

假设我正确理解了这个问题,也许你需要这样的东西:

using namespace std; // I'm lazy

string temp;
int number;
while(std::cin >> temp)
{
    number = 0;
    if (temp.find(".") != string::npos) number = 1000; // string has decimal point
    else istringstream(temp) >> number; // no decimal point, probably an integer

    for(int i = 0; i < number; i++) {
        std::cin >> readMoreFloats; 
    }
}

我们使用基本方法检查字符串是否有小数点以指示它是否为浮点数。假设您的输入文件始终格式正确,并且总是省略整数的小数点(即使通过某些解释,“2.”等值可能有效),这应该按预期工作。