无法在字符串中查找“空格”字符

时间:2016-04-13 13:16:51

标签: c++ string

我一直在努力让一个简单的函数工作,目的是传入一个字符,然后函数搜索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,如果我传入撇号字符,它只是找不到。

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

1 个答案:

答案 0 :(得分:1)

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

  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个字节,因此所有结果索引都有意义;

  2. However if I pass in the space character, it returns 31 rather than 29:问题是正好占用3个字节(226 128 153)而不是1个字节,因为它是Unicode。您应该使用std::wstringwchar_t来使其正常工作,或者用'替换该字符(ASCII 39);

  3. and if I pass in the apostrophe character, it just doesn't get found.撇号不是ASCII,因此您正在搜索多个字节而不是单个字节。