获取字符串中的第 i 个字符时出现问题

Having problems getting the ith character in a string

本文关键字:字符 问题 字符串 获取      更新时间:2023-10-16

我想访问str中的ith char

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

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

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

字符串

中的"–"不是-(ASCII 0x2D(,而是U + 2013。

序列342 200 223显示为八位字节并将其转换为十六进制,它可以写成0xE2 0x80 0x93,即字符的 UTF-8 表示。

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

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