1

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

            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[] [with _CharT = char, _Traits = std::char_traits, _Alloc = std::allocator](((unsigned int) 中请求成员 c_str )(i + 1))),它是非类类型 char

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

4

4 回答 4

7

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

听起来您正在尝试extrai+1th 位置开始解析字符串。您可以使用以下方法执行此操作:

second = atof(extra.substr(i + 1).c_str());
于 2009-11-07T23:30:42.240 回答
1

根据错误消息,extra类型为std::string. 执行此操作extra[i+1]时,结果是 typechar并包含字符串extra中 position 处的字符i+1

可能不是你想要的。

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

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

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

stringstream ss(str_quan);
double first;
ss >> first;
于 2009-11-07T23:32:45.430 回答
1

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

你到底想做什么?

如果您只想要字符 i+1 到“extra”的末尾(并且您知道额外的长度),您需要类似:

 second = atof(extra.c_str() + i + 1);
于 2009-11-07T23:33:30.503 回答
0

在寻求帮助时,提供一个可编译的示例通常是非常有用的。

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

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

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

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

于 2009-11-07T23:32:55.993 回答