我有一些像这样的输入:(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];
Run Code Online (Sandbox Code Playgroud)
但它加载失败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]; // ")"
Run Code Online (Sandbox Code Playgroud)
我尝试过skipws和noskipws但没有效果.请帮忙吗?非常感谢.
问题是相当微妙的,但它有一个事实,即做E中14.3925125E在科学记数法解析.在数学中,E后缀是一个缩写,用于将其操作数乘以10随后数字的取幂.例如,5.23E4用科学记数法表示5.23 * 10^4.
在您的情况下,由于数字不遵循E后缀,因此将其解析为无效的浮点文字,因此未分配数字degrees[1].
degrees[1]我建议不要直接读取值,而是将其读入字符串,从中解析浮点部分E,然后转换并将它们分配给各自的变量.