gpt4 book ai didi

c++ - 为什么我的字符串转换为 float-conversion 不能用 istringstream 得到所有小数?

转载 作者:太空狗 更新时间:2023-10-29 20:34:29 24 4
gpt4 key购买 nike

我正在逐行读取一个以定界符分隔的文件,并通过定界符“|”拆分输入那是在文件中使用的。在阅读该行时,我需要将“1.9”或“2.38”之类的输入转换为 float ,但我似乎无法使其工作。我得到的只是第一个数字,例如“1”或“2”。

我的代码有什么问题?我的结构 person 看起来像这样:

struct person {
string firstname;
string lastname;
string signature;
float length;

string getFullName() {
return firstname + " " + lastname;
}
};

我的方法:

vector<person> LoadFromFile(string filename) {
string line;
vector<person> listToAddTo;
person newPerson;

ifstream infile(filename);
if (!infile) {
cerr << "Error opening file." << endl;
//Error
}

while (getline(infile, line)) {
string field;
vector<string> fields;
istringstream iss_line(line);
while (getline(iss_line, field, DELIM)) {
fields.push_back(field);
}

newPerson.firstname = fields[0];
newPerson.lastname = fields[1];
newPerson.length = strtof((fields[2]).c_str(),0);
newPerson.signature = fields[3];

listToAddTo.push_back(newPerson);
}
return listToAddTo;
}

和文本文件:

morre|bo|1.8|morbox1|
mo|her|1.8|moxher1|
mo|herm|1.9|moxher2|

我尝试通过将输入写入字符串来隔离问题,结果显示得很好。
所以问题似乎出在从字符串到 float 的转换上:

newPerson.length = strtof((fields[2]).c_str(),0);

最佳答案

查看有关 std::strtof 的文档在 cpp.reference 我们可以找到

... it takes as many characters as possible to form a valid floating-point representation and converts them to a floating-point value...

“有效的浮点表示”可以是

... nonempty sequence of decimal digits optionally containing decimal-point character (as determined by the current C locale) (defines significand)

显然,在 OP 的语言环境中,小数点字符不是 ,就像在他们试图读取的文件中一样,因此数字被误解了。

值得注意的是,从 C++11 开始,我们可以使用 std::stofstd::string 直接转换为数字。相反。

关于c++ - 为什么我的字符串转换为 float-conversion 不能用 istringstream 得到所有小数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48289373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com