我得到了这样的输入:(50.1003781N, 14.3925125E),它存储在const string & input中。我要做的是提取括号,得到代表GPS协调的数字- 50.1003781,保存N,并对第二个coord做同样的操作。
我的代码是这样的:
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]; // ")"我试过跳绳和鼻翼,但没有效果。有人能帮忙吗?非常感谢。
发布于 2014-03-26 22:51:31
这个问题非常微妙,但它与E中的14.3925125E是用科学符号解析的事实有关。在数学中,E后缀是它的操作数乘以10乘以后面的数的缩写。例如,5.23E4在科学符号中的意思是5.23 * 10^4。
在您的情况下,由于一个数字不跟随E后缀,因此它被解析为无效的浮点文字,因此该数字没有分配给degrees[1]。
与直接将值读入degrees[1]不同,我建议将其读入字符串,解析E中的浮点部分,并将其转换为各自的变量并分配给它们。
https://stackoverflow.com/questions/22674481
复制相似问题