2016-11-10 28 views
1

我想訪問ithcharstr獲得第i個字符的字符串有問題

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; 
} 

我的期望:

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\342 \200 \223八進制)。

這通常發生在使用啞文處理器編寫代碼並啓用自動更正時。這將是我對這裏發生的事情的猜測。

4

字符串中的「 - 」不是 - (ASCII 0x2D),而是U+2013

序列\342 \200 \223似乎在八位位組,並將其轉換爲十六進制,它可以寫爲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; 
} 

所有需要改變的都是減號,在它被刪除並重新輸入之後,它按預期工作。