4

次のような入力があります。(50.1003781N, 14.3925125E)これは に保存されていconst string & inputます。私がやろうとしているのは、ブラケットを抽出し、GPS 座標を表す番号 (50.1003781) を取得し、N を保存して、2 番目の座標に対して同じことを行うことです。

だからここに私のコードがあります:

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]ゼロを読み込み、 -1 と表示されます。tellg()解析された文字列は次のようになります。

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 を試しましたが、効果がありませんでした。誰か助けてくれませんか?どうもありがとう。

4

1 に答える 1

8

E問題はかなり微妙ですが、 in14.3925125Eが科学表記法で解析されるという事実に関係しています。数学では、接尾辞は、そのオペランドに、それに続く数値Eの累乗を掛けることの省略形です。10たとえば、5.23E4科学表記法では を意味し5.23 * 10^4ます。

あなたの状況では、数字が接尾辞に従わないためE、無効な浮動小数点リテラルとして解析されるため、数字はに割り当てられませんdegrees[1]

値をdegrees[1]直接読み込むのではなく、文字列に読み込み、 から浮動小数点部分を解析し、E変換してそれぞれの変数に割り当てることをお勧めします。

于 2014-03-26T22:51:31.137 に答える