获取字符串中的第 i 个字符时出现问题
Having problems getting the ith character in a string
我想访问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;
}
所有需要更改的是减号,在删除并重新键入后,它按预期工作。
相关文章:
- 从矢量C++读取字符时出现问题
- C++:__aligned(__alignof__) 导致字符数组数据出现问题?
- C++理解计算字符变量的问题
- 将十六进制值设置为用于填充的字符变量时出现问题
- 编写 cin.get() 以接收字符数组时出现问题
- 从 argv[1] 转换为字符 * 字符串后有什么问题?
- 将字符数组转换为结构时出现问题. 结构的字符数组变量溢出
- 字符 * 未从重载运算符或内存管理问题正确返回
- 将utf16宽std::wstring转换为utf8窄std::string以获得罕见字符时出现问题
- 我在使用字符的函数时遇到了一些问题
- 用wchar_t处理 unicode 字符好吗?它不会引起任何问题吗?
- 将 c++ 字符串转换为常量字符 * 时出现问题
- Unicode 字符问题/转换参数
- 结构转换为原始字符问题
- 将 str 转换为字符*问题
- 将字符串转换为常量字符*问题
- istream末尾的字符问题
- C++字符*问题
- 结构中的字符问题
- 数据结构- c++字符问题