Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++将字符串转换为双份的错误_C++_Atof - Fatal编程技术网

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

C++将字符串转换为双份的错误,c++,atof,C++,Atof,我正在尝试将字符串转换为双精度字符串。代码非常简单 double first, second; first=atof(str_quan.c_str()); second=atof(extra[i+1].c_str()); cout<<first<<" "<<second<<endl; quantity=first/second;

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

            double first, second;
            first=atof(str_quan.c_str());
            second=atof(extra[i+1].c_str());
            cout<<first<<" "<<second<<endl;
            quantity=first/second;
当试图转换extra时,编译器向我抛出了这颗智慧宝石:

错误:请求中的成员c_str extra.std::basic_string::operator[]带_CharT=char,_Traits=std::char_Traits,_Alloc= std::分配器]未签名 inti+1,属于非类 类型字符

我不知道那是什么意思。如果我不能额外[I+1],我得到3。如果我将extra作为字符串保留,程序将尝试将前2除以51 ascii除以3。到底是怎么回事?

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

听起来好像您正试图从i+1位置开始解析额外的字符串。您可以使用以下方法执行此操作:

second = atof(extra.substr(i + 1).c_str());
听起来extra是一个std::string,所以extra[i+1]返回一个非类类型的char

听起来好像您正试图从i+1位置开始解析额外的字符串。您可以使用以下方法执行此操作:

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

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

可能不是你想要的

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

extra2 = extra.substr(i+1);
// ...
second=atof(extra2.c_str());
处理这种不易出错的转换的更好方法是使用stringstreams:

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

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

可能不是你想要的

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

extra2 = extra.substr(i+1);
// ...
second=atof(extra2.c_str());
处理这种不易出错的转换的更好方法是使用stringstreams:

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

在寻求帮助时,通常需要提供一个可编译的示例

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

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

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

因此,extra[x]返回的字符没有方法c_str

当请求帮助时,通常需要提供一个可编译的示例

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

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

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

因此extra[x]返回的字符没有方法c_str,但我认为extra的类型是std::string。所以表达式extra[i+1]是extra的字符i+1,看起来是'3'

你到底想做什么

如果您只需要字符i+1到extra的末尾,并且您知道extra的长度,那么您需要类似以下内容:

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

您还没有说过,但我认为extra是std::string类型的。所以表达式extra[i+1]是extra的字符i+1,看起来是'3'

你到底想做什么

如果您只需要字符i+1到extra的末尾,并且您知道extra的长度,那么您需要类似以下内容:

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

我的猜测是:extra是一个字符串,extra[i+1]是一个char,char没有c_str方法。如果您想转换字符串的一部分,您可能可以执行类似atofextra.c_str[i+1]的操作,因为代码不完整-您缺少extra的定义。请尝试一下。错误:从const char到const char的转换无效*错误:初始化double-atofconst char*@UncleBens-+1的参数1,以便无私地将正确答案作为注释。代码已完成,我只是没有发布所有内容。如果你认为有帮助的话,我可以。我的猜测是:extra是字符串,extra[I+1]是字符,而字符没有c_str方法。如果您想转换字符串的一部分,您可能可以执行类似atofextra.c_str[i+1]的操作,因为代码不完整-您缺少extra的定义。请尝试一下。错误:从const char到const char的转换无效*错误:初始化double-atofconst char*@UncleBens-+1的参数1,以便无私地将正确答案作为注释。代码已完成,我只是没有发布所有内容。如果你认为这会有帮助的话,我可以。这非常有效!非常感谢。我已经做了一个多小时了。另外:extra.c_str+I+1可以避免创建临时字符串对象。这非常有效!非常感谢。我已经做了一个多小时了。另外:extra.c_str+I+1可以避免创建临时字符串object最好使用substr,因为如果I+1超过字符串的末尾,它会将std::抛出_范围之外;这就是为什么我说,你知道额外的时间是多少。不过,我同意你的观点;另一种方法是在调用atof之前,断言+1