正在尝试在条件下将字符串转换为双精度

Trying to convert a string to double under conditions

本文关键字:转换 双精度 字符串 条件下      更新时间:2023-10-16

我有一个函数,它使用std字符串参数来测试是否有alpha字符。最好只测试数字字符,但我还没有做到这一点。我只是想让它识别输入中是否没有数字。如果没有,它会循环错误消息,直到只有数字。在这之后,我试图通过使用atof()将字符串转换为double,这样它就可以在main()中返回。我得到一个调试断言失败!运行时的消息,如果输入了数字,则表示表达式字符串下标超出范围。另一方面,如果有字母输入,则会继续循环使用错误消息。我得到了下面函数的代码。有人知道我做错了什么吗?我没主意了。。。

double Bet::betProb(std::string b)
{
    bool alphChar = false;
    double doubleBet;
    for(int i = 0; i < b.size(); i++){
        if(isalpha(b[i])){
            alphChar = true;
        }
    }
    while(alphChar){
        cout << "Error! Bet only with numbers." << endl;
        cin >> b;
        for(int i = 0; i < b.size(); i++){
            if(!isalpha(b[i])){
                alphChar = false;
            }
        }
    }
    string F=b;
    int T=F.size();
    char Change[100];
    for (int a=0;a<=T;a++)
    {
        Change[a]=F[a];
    }
    doubleBet = atof(Change);
    return doubleBet;
}

由于您的问题已经解决,我想我会向您展示使用标准C++功能的方法:

#include <string>
#include <stdexcept>
double Bet::betProb(const std::string& str)
{
    double d;
    try {
        d = std::stod(str);
    } catch (const std::invalid_argument&) {
        std::cerr << "Argument is invalidn";
        throw;
    } catch (const std::out_of_range&) {
        std::cerr << "Argument is out of range for a doublen";
        throw;
    }
    return d;
}