C ++ istringstream和whitespace

时间:2014-03-26 22:35:10

标签: c++ istringstream

我有一些这样的输入:(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但没有效果。请帮忙吗?非常感谢。

1 个答案:

答案 0 :(得分:8)

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

在您的情况下,由于数字不遵循E后缀,因此将其解析为无效的浮点文字,因此该数字未分配给degrees[1]

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