在字符串中获取第i个字符时遇到问题

时间:2016-11-10 01:21:52

标签: c++ string char

我想访问ith

中的char str
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的价值分别为-,3,x

3 个答案:

答案 0 :(得分:4)

位置11处的字符不是Unicode字符U+002D MINUS,就像您期望的那样。它实际上是Unicode字符U+2013 EN DASH。在UTF-8中,U+2013被编码为字节序列0xE2 0x80 0x93(八进制中的\342 \200 \223)。

当使用哑字处理器编写代码并启用自动更正时,通常会发生这种情况。这就是我对这里发生的事情的猜测。

答案 1 :(得分:4)

&#34; - &#34;在你的字符串中不是 - (ASCII 0x2D)而是U+2013

序列\342 \200 \223似乎在八位字节中并将其转换为十六进制,它可以写为0xE2 0x80 0x93,并且是UTF-8字符的表示。

答案 2 :(得分: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;
}

所有需要更改的都是减号,在删除后重新输入并按预期工作。