修改
转而使用atof
,因为它不会在这种情况下生成副本。从查看两个实现,它应该在第一个无效符号后停止。
原始
考虑这个简单的设置:
const char* string = "1.0 2.0 3.0 4.0";
float float1 = stof(string);
float float2 = stof(string + 4);
float float3 = stof(string + 8);
在这种情况下,stof会一直解析到结束还是在初始位置后的第一个空格处停止?
我需要解析一个编码成字符串的很长的浮点列表,所以我基本上需要知道是否必须将数字复制到sperate(小)缓冲区并在此缓冲区上调用stof,或者我可以使用stof as上方。
答案 0 :(得分:0)
它丢弃前导空格并解析整个字符串。摘自std::stof参考(强调我的):
功能丢弃任何空格字符(由...确定) std :: isspace())直到找到第一个非空白字符。然后呢 尽可能多个字符 以形成有效的浮点数 表示并将它们转换为浮点值。
对于使用string + 4
和string + 8
表达式的情况,您要向函数提供"2.0 3.0 4.0"
和"3.0 4.0"
字符串。您还应该避免命名变量string
。