2016-11-10 11 views
1

私は何を期待持つ問題は

int main() { 
    string str = "5.9x^11+x^3–3x^10"; 
    for(int i = 0; i<17; i++){ 
     cout<<i<<": "; 
     cout<<str.at(i)<<endl; 
    } 
    return 0; 
} 

strithcharにアクセスしたい:

0: 5 
1: . 
2: 9 
3: x 
4:^
5: 1 
6: 1 
7: + 
8: x 
9:^
10: 3 
11: - 
12: 3 
13: x 
14:^
15: 1 
16: 0 

私は何を得る:

0: 5 
1: . 
2: 9 
3: x 
4:^
5: 1 
6: 1 
7: + 
8: x 
9:^
10: 3 
11: \342 
12: \200 
13: \223 
14: 3 
15: x 
16:^

11-13の値がでない理由が分かりませんそれぞれ。

答えて

4

あなたが期待しているように、位置11の文字はUnicode文字U+002D MINUSではありません。実際にはUnicode文字U+2013 EN DASHです。 UTF-8では、U+2013はバイトシーケンス0xE2 0x80 0x93(8進数で\342 \200 \223)としてエンコードされます。

通常、これはダムワードプロセッサを使用してコードを書き、自動修正が有効な場合に発生します。それは私の推測で、ここで何が起こったかということになります。

4

文字列の " - "は - (ASCII 0x2D)ではなく、U+2013です。

シーケンス\342 \200 \223はオクテットであり、それを16進数に変換すると思われます。これは0xE2 0x80 0x93と書かれ、それは文字の表現であるUTF-8です。

0
#include<iostream> 
#include<string> 
using namespace std; 

int main() { 
string str = "5.9x^11+x^3-3x^10"; 
for(int i = 0; i<17; i++){ 
    cout<<i<<": "; 
    cout<<str.at(i)<<endl; 
} 
return 0; 
} 

変更する必要があるのは、削除して再入力した後、マイナス記号です。