gpt4 book ai didi

c++ - 无法在字符串中找到 'space' 字符

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:13:51 26 4
gpt4 key购买 nike

我一直在努力让一个简单的函数起作用,目的是传入一个字符,然后该函数搜索字母表字符串,然后如果找到该字符,则返回该字符在字符串中的索引。

我有一个包含字母表的基本常量,包括撇号和空格字符:

const string ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ.,’ ";

现在我有一个以字符作为参数的函数:

int charaPosition(string chara){

transform(chara.begin(), chara.end(),chara.begin(), ::toupper);

int charaIndex = ALPHABET.find(chara, 0);

if (charaIndex != string::npos) {

return charaIndex;

}else{
cout << "Not found" << endl;
}
}

函数是这样启动的:

cout << charaPosition("s") << endl;

在某一点上一切正常,如果我传入 A,函数返回 0,B 返回 1 等。但是,如果我传入空格字符,它返回 31 而不是 29,如果我传入撇号字符,只是找不到。

我将非常感谢任何人的帮助。

最佳答案

你的问题是 ' 不是 ASCII,而是 Unicode。它在您的字符串中占用超过 1 个字节。

  1. 在某个点之前一切正常,如果我传入 A,函数返回 0,B 返回 1 等等:对,到那个点,它都是 ASCII,所以每个字符有 1 个字节,因此所有结果索引都有意义;

  2. 但是,如果我传入空格字符,它返回 31 而不是 29:问题是 ' 正好占用 3 个字节 (226 128 153)而不是 1 个字节,因为它是 Unicode。您应该使用 std::wstringwchar_t 来使其正常工作,或者将该字符替换为 ' (ASCII 39);

  3. 如果我传入撇号字符,它就是找不到。:撇号 不是 ASCII,所以您正在搜索多个字节而不是单个字节。

关于c++ - 无法在字符串中找到 'space' 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36599644/

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