c++验证String中的Double类型

c++ Validating a Double in a String

本文关键字:Double 类型 中的 String 验证 c++      更新时间:2023-10-16

请原谅任何业余错误,我在这方面还是新手。对于我的类,我们需要将双输入转换为字符串,以便在项目的不同部分使用。整数的验证工作得很好,我尝试使用前面问题中的一些代码在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);

谢谢。

编辑:我只是发现这我如何验证字符串是有效的双(即使它有一个点在它)?我可以肯定地说我不知道发生了什么。

如果你真的很想手工完成,可以看看下面的方法:

如何从字符串中手动解析浮点数

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

并阅读评论。这不是很简单,但应该行得通。或者更好的是,从c++中检查stopd的代码。

为什么要使用双精度对象作为字符串的索引?此外,我将跳过使用++来增加双精度。

我明白了

只是需要在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的整数,用于计数点,并确保只输入一个。