c ++验证字符串中的Double

时间:2015-09-28 06:23:23

标签: c++ double validating

请原谅任何业余错误,我还是很陌生。对于我的类,我们需要将双输入转换为字符串以在项目的不同部分中使用。对整数的验证工作正常,我尝试使用上一个问题中的一些代码Validating a double in c++ 但是,令我很懊恼的是,它没有用。

这是我的代码:

string input;
bool valid;
double num;

//Verification of valid inputs
do
{
    valid = true;
    cout << "What is the " << name << " rate of the population? (% per year): ";
    getline(cin, input);
    num = input.length();

    if (num == 0)
    {
        cout << "\nNo data was entered, please enter a number.\n";
        valid = false;
    }
    else
    {
        for (double i = 0; i < num; i++)
        {
            if (input.at(i) < '0' || input.at(i) > '9')
            {
                cout << "\nPlease enter a valid, positive number.\n";
                valid = false;
                break;
            }
        }
    }
} while (valid == false);
return stod(input);

感谢。

编辑: 我刚发现这个How do i verify a string is valid double (even if it has a point in it)?,我可以肯定地说我不知道​​发生了什么。

3 个答案:

答案 0 :(得分:0)

如果您真的热衷于手动操作,请查看以下方法:

How to manually parse a floating point number from a string

https://www.daniweb.com/programming/software-development/code/217315/c-function-stod-string-to-double-convert-a-string-to-a-double

阅读评论。这不是很简单,但应该有效。或者甚至更好,检查来自C ++的stod代码。

答案 1 :(得分:0)

为什么使用double作为字符串的索引?另外,我会跳过使用++来增加双倍。

答案 2 :(得分:0)

想出来。

只需在if语句中添加内容即可。

 if ((input.at(i) < '0' || input.at(i) > '9') && input.at(i) != '.')
            {
                cout << "\nError! illegal character was entered.\n";
                valid = false;
                break; // 12w345

                if (input.at(i) == '.')
                    ct++;

                if (ct > 1)
                {
                    cout << "Error! Only one dot allowed.";
                    valid = false;

ct是一个值为0的整数来计算点并确保只输入一个。