我无法使用atof()函数。我只希望用户输入值(以十进制数字的形式),直到他们输入'|'然后它就会打破循环。我希望这些值最初以字符串形式读入,然后转换为双精度因为我在过去使用这种输入方法时发现,如果你输入数字'124'它会突破循环,因为'124'是'|'的代码焦炭。
我环顾四周,发现了atof()函数,它显然将字符串转换为双精度,但是当我尝试转换时,我得到消息“没有合适的转换函数从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();
}
答案 0 :(得分:4)
你需要
atof(input.c_str());
这将是有问题的“合适的转换功能”。
std::string::c_str
Documentation:
const char * c_str()const;
获取等效的C字符串
返回一个指向数组的指针,该数组包含一个以空字符结尾的字符序列(即C字符串),表示字符串对象的当前值。
答案 1 :(得分:3)
您还可以使用strtod
函数将字符串转换为double:
std::string param; // gets a value from somewhere
double num = strtod(param.c_str(), NULL);
您可以查看strtod
的文档(例如man strtod
,如果您使用的是Linux / Unix),以查看有关此功能的更多详细信息。