我想访问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
答案 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;
}
所有需要更改的都是减号,在删除后重新输入并按预期工作。