我一直在努力让一个简单的函数工作,目的是传入一个字符,然后函数搜索ALPHABET字符串,然后如果找到该字符,则返回字符串中字符的索引。 / p>
我有一个包含字母表的基本常量,包括撇号和空格字符:
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,如果我传入撇号字符,它只是找不到。
我会非常感谢任何人的帮助。
答案 0 :(得分:1)
您的问题是’
不是ASCII,而是Unicode。它在字符串中占用超过1个字节。
It all works fine up to a certain point, if I pass in A, the function returns 0, B return 1 etc
:是的,到目前为止,它都是ASCII,因此每个字符有1个字节,因此所有结果索引都有意义;
However if I pass in the space character, it returns 31 rather than 29
:问题是’
正好占用3个字节(226 128 153)而不是1个字节,因为它是Unicode。您应该使用std::wstring
和wchar_t
来使其正常工作,或者用'
替换该字符(ASCII 39);
and if I pass in the apostrophe character, it just doesn't get found.
:撇号不是ASCII,因此您正在搜索多个字节而不是单个字节。