【发布时间】:2013-05-16 14:38:16
【问题描述】:
我想编写一个函数,如果给定字符是俄语元音,则返回 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
}
结果是:
1
1
0
对我来说有什么奇怪的。我期望得到以下结果:
1
0
0
似乎有某种我还不知道的内部机制。我起初对如何修复此功能以使其正常工作感兴趣。其次,那里发生了什么,我得到了这个结果。
【问题讨论】:
-
可能只有我,但我不认为
Ж包含在аяё×эеуюыи中 -
@Renan:这就是为什么“0”是第二个预期结果。
-
与您的问题无关,但您可以将函数缩短一点:
return find(matcher.begin(), matcher.end(), working_char) != matcher.end();您也可以将matcher字符串标记为const,因为它永远不会改变,甚至可能是static. -
代码工作正常:ideone.com/CBJoD4(尽管您的字符串匹配器不正确。它应该是“аяёоэеуюыи”)
-
@icepack:它不能正常工作;我怀疑编译器会将超出范围的字符转换为恰好给出预期结果的值,而 OP 没有。