用C++匹配俄语元音

bey*_*ran 5 c++ cyrillic

我想编写一个函数,如果给定的字符是俄语元音,则返回true.但我得到的结果对我来说很奇怪.这是我到目前为止所得到的:

#include <iostream>

using namespace std;

bool is_vowel_p(char working_char)
// returns true if the character is a russian vowel
{
    string matcher = "???×??????";

    if (find(matcher.begin(), matcher.end(), working_char) != matcher.end())
        return true;
    else
        return false;
}


void main()
{
    cout << is_vowel_p('?') << endl; // russian vowel
    cout << is_vowel_p('?') << endl; // russian consonant

    cout << is_vowel_p('D') << endl; // latin letter
}
Run Code Online (Sandbox Code Playgroud)

结果是:

1
1
0
Run Code Online (Sandbox Code Playgroud)

对我来说有什么奇怪的.我期待以下结果:

1
0
0
Run Code Online (Sandbox Code Playgroud)

似乎有某种内部机制我还不知道.我起初对如何修复此功能以使其正常工作感兴趣.第二,那里发生了什么,我得到了这个结果.

Mik*_*our 8

string并且char只保证代表基本字符集中的字符 - 不包括西里尔字母.

使用wstringwchar_t,并L在字符串和字符文字之前添加以指示它们使用宽字符,应该允许您使用这些字母.

此外,为了便携性,您需要包含<algorithm>for find,并给出main返回类型int.