将字符串转换为double的C ++错误

时间:2009-11-07 23:27:10

标签: c++ atof

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

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

当试图转换额外的时候,编译器会向我抛出这个智慧的宝石:

  

错误:请求成员c_str   extra.std :: basic_string的&LT; _CharT,   _Traits,_Alloc&gt; :: operator [] [with _CharT = char,_Traits = std :: char_traits,_Alloc =   的std ::分配器](((无符号   int)(i + 1))),非类   键入char

我不知道这意味着什么。如果我输出额外的[i + 1],我得到3.如果我将额外的字符串作为字符串,程序会尝试将第一个(2)除以51(ascii为3)。到底是怎么回事?

4 个答案:

答案 0 :(得分:7)

听起来extrastd::string,因此extra[i+1]会返回char,这是非类型的。{/ p>

听起来你正试图从extra位置开始解析字符串i+1。您可以使用以下方式执行此操作:

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

答案 1 :(得分:1)

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

可能不是你想要的。

作为修复,请使用新字符串替换extra[i+1],如下所示:

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

处理此转换(更不容易出错)的更好方法是使用stringstreams:

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

答案 2 :(得分:1)

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

你究竟想做什么?

如果你只想要字符i + 1到“额外”的结尾(你知道多长时间),你想要的东西如下:

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

答案 3 :(得分:0)

在寻求帮助时,提供一个可编辑的例子往往是非常有用的。

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

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

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

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

的char