繁体   English   中英

将字符串转换为双精度的C ++错误

[英]C++ error converting a string to a double

我正在尝试将字符串转换为双精度。 代码很简单。

            double first, second;
            first=atof(str_quan.c_str());
            second=atof(extra[i+1].c_str());
            cout<<first<<" "<<second<<endl;
            quantity=first/second;

当尝试进行额外转换时,编译器向我抛出了这一智慧宝典:

错误:在extra.std :: basic_string <_CharT,_Traits,_Alloc> :: operator []中请求成员c_str [[_CharT = char,_Traits = std :: char_traits,_Alloc = std :: allocator]((((unsigned int )(i + 1))),它是非类类型char

我不知道那是什么意思。 如果我退出extra [i + 1],我得到3。如果我将Extra作为字符串留下,程序将尝试首先将(2)除以51(ascii为3)。 到底他妈发生了什么?

听起来extra是一个std::string ,所以extra[i+1]返回一个char ,它是非类类型的。

听起来您正在尝试从第i+1个位置开始extra解析字符串。 您可以使用:

second = atof(extra.substr(i + 1).c_str());

根据错误消息, extra类型为std::string 当您执行extra[i+1] ,结果为char类型,并且在字符串i+1位置extra中包含该字符。

可能不是您的意图。

作为解决方法,将extra[i+1]替换为新字符串,如下所示:

extra2 = extra.substr(i+1);
// ...
second=atof(extra2.c_str());

处理此转换(不易出错)的更好方法是使用字符串流:

stringstream ss(str_quan);
double first;
ss >> first;

您没有说,但我认为“ extra”类型为std :: string。 因此,表达式“ extra [i + 1]”是“ extra”的字符“ i + 1”,似乎是“ 3”。

您实际上想做什么?

如果您只希望字符i + 1到“ extra”的结尾(并且您知道多余的字符有多长),则需要以下内容:

 second = atof(extra.c_str() + i + 1);

当寻求帮助时,经常会提供一个可汇编的示例。

我的猜测(我强调猜测是因为没有足够的类型信息或行号)。

second=atof(extra[i+1].c_str());

// Guess 
// extra is std::string.

因此extra [x]返回一个没有方法c_str()的char

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM