我正在尝试将字符串转换为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)。到底是怎么回事?
答案 0 :(得分:7)
听起来extra
是std::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