C ++使用atof将字符串转换为双精度

Sha*_*810 1 c++ string double atof

我无法使用该atof()功能。我只希望用户输入值(以十进制数字的形式),直到他们输入'|',然后打破循环。我希望这些值最初以字符串形式读取,然后转换为双精度,因为我在过去使用此输入法时发现过,如果输入数字“ 124”,则会中断循环,因为“ 124”是“ |”的代码 字符

我四处张望,发现了atof()strings 转换为doubles 的函数,但是当我尝试转换时,得到消息

“不存在从std :: string到const char的合适转换函数”。

我似乎无法弄清楚为什么会这样。

void distance_vector(){

double total = 0.0;
double mean = 0.0;
string input = " ";
double conversion = 0.0;
vector <double> a;

while (cin >> input && input.compare("|") != 0 ){
conversion = atof(input);
a.push_back(conversion);
}

keep_window_open();
}
Run Code Online (Sandbox Code Playgroud)

dje*_*lin 5

你需要

atof(input.c_str());
Run Code Online (Sandbox Code Playgroud)

那就是有问题的“合适的转换功能”。

std::string::c_str 说明文件

const char * c_str()const;
获取等效的C字符串
返回指向包含以N结束的字符序列(即C字符串)的数组的指针,该字符串表示字符串对象的当前值。


DMH*_*DMH 5

您还可以使用该strtod函数将字符串转换为双精度:

std::string param;  // gets a value from somewhere
double num = strtod(param.c_str(), NULL);
Run Code Online (Sandbox Code Playgroud)

您可以查找文档strtod(例如,man strtod如果您使用的是 Linux / Unix)以查看有关此功能的更多详细信息。