gpt4 book ai didi

C++: std::string 问题

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:28 25 4
gpt4 key购买 nike

我有这个简单的代码:

#include <iostream>
#include <fstream>

using namespace std;

int main(void)
{
ifstream in("file.txt");
string line;
while (getline(in, line))
{
cout << line << " starts with char: " << line.at(0) << " " << (int) line.at(0) << endl;
}
in.close();
return 0;
}

打印:

  0.000000 0.000000 0.010909 0.200000    starts with char:   32
A 0.023636 0.000000 0.014545 0.200000 starts with char: A 65
B 0.050909 0.000000 0.014545 0.200000 starts with char: B 66
C 0.078182 0.000000 0.014545 0.200000 starts with char: C 67

...

, 0.152727 0.400000 0.003636 0.200000 starts with char: , 44
< 0.169091 0.400000 0.005455 0.200000 starts with char: < 60
. 0.187273 0.400000 0.003636 0.200000 starts with char: . 46
> 0.203636 0.400000 0.005455 0.200000 starts with char: > 62
/ 0.221818 0.400000 0.010909 0.200000 starts with char: / 47
? 0.245455 0.400000 0.009091 0.200000 starts with char: ? 63
¡ 0.267273 0.400000 0.005455 0.200000 starts with char: � -62
£ 0.285455 0.400000 0.012727 0.200000 starts with char: � -62
¥ 0.310909 0.400000 0.012727 0.200000 starts with char: � -62
§ 0.336364 0.400000 0.009091 0.200000 starts with char: � -62
© 0.358182 0.400000 0.016364 0.200000 starts with char: � -62
® 0.387273 0.400000 0.018182 0.200000 starts with char: � -62
¿ 0.418182 0.400000 0.009091 0.200000 starts with char: � -62
À 0.440000 0.400000 0.012727 0.200000 starts with char: � -61
Á 0.465455 0.400000 0.014545 0.200000 starts with char: � -61

奇怪...我怎样才能真正得到字符串的第一个字符?

提前致谢!

最佳答案

您正在获取字符串中的第一个字符。

但看起来该字符串是 UTF-8 字符串(或可能是其他一些多字节字符格式)。

这意味着 os 打印的每个符号(字形)由 1 个(或多个字符)组成。
如果它是 UTF-8,那么 ASCII (0-127) 范围之外的任何字符实际上都由 2 个(或更多字符)组成,并且字符串打印代码正确地解释了这一点。但字符打印码无法正确解码大于127的单个字符。

我个人认为在程序内部使用动态宽度字符格式不是一个好主意(它们可以用于传输和存储),因为它们使字符串操作变得更加复杂。我建议您将字符串转换为固定宽度格式以进行内部处理,然后将其转换回 UTF-8 以进行存储。

我个人会在内部使用 UTF-16(或 UTF-32,具体取决于 wchar_t 是什么)(是的,从技术上讲,我知道 UTF-16 不是固定宽度,但在所有合理的教学环境中,它是固定宽度(当我们包含沙子时-script 然后我们可能需要使用 UTF-32))。您只需要为输入/输出流注入(inject)适当的 codecvt facet 即可进行自动翻译。然后可以在内部将代码作为单个字符使用 wchar_t 类型进行操作。

关于C++: std::string 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3483965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com