gpt4 book ai didi

C++ istringstream 和空格

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:23:29 30 4
gpt4 key购买 nike

我有这样的输入:(50.1003781N, 14.3925125E) 存储在 const string & input 中。我想要做的是提取括号,获取代表 GPS 坐标的数字 - 50.1003781,保存 N 并对第二个坐标执行相同的操作。

我的代码如下:

istringstream iStream(input);

char brackets[2]; //To store the brackets
char types[2]; //To store if it is N/S or W/E
char delim; //To store ","
double degrees[2];

iStream >> brackets[0] >> degrees[0] >> types[0] >> delim;

//The delim loads the "," and here goes my problem with whitespace which is next

iStream >> degrees[1] >> types[1] >> brackets[1];

但是加载 degrees[1] 失败,它加载零并且 tellg() 说 -1 可能是因为逗号后面的空格。解析后的字符串应该是这样的:

cout << brackets[0]; // "("
cout << degrees[0]; // "50.1003781"
cout << types[0]; // "N"
cout << delim; // ","
cout << degrees[1]; // "14.3925125"
cout << types[1]; // "E"
cout << brackets[1]; // ")"

我试过 skipws 和 noskipws 但没有效果。有人可以帮忙吗?非常感谢。

最佳答案

问题非常微妙,但它与 14.3925125E 中的 E 以科学记数法解析有关。在数学中,E 后缀是其操作数乘以 10 乘以后面数字的幂的缩写。例如,科学计数法中的5.23E4表示5.23 * 10^4

在您的情况下,由于数字不跟在 E 后缀之后,它被解析为无效的浮点文字,因此该数字未分配给 degrees[1].

我建议不要直接将值读入degrees[1],而是将其读入字符串,解析E中的浮点部分,然后将它们转换并分配给各自的变量。

关于C++ istringstream 和空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22674481/

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