如何将字符串与多个char c ++进行比较

时间:2014-01-26 00:47:20

标签: c++ string char

我正在试图找出字符串中是否包含单词

if( mystring[i] == 'a' | 'b' | 'c' | 'd' | 'e' |)
   // do stuff but it always does stuff no matter that mystring[i] is. 
即使mystring [i] =空格或句点,

总是评估为true 我试图使用strcmp,但我无法正常工作。我希望它评估为真 只有它=一个字母。

2 个答案:

答案 0 :(得分:4)

您不能比较那样的多个值。请改用switch语句:

switch( mystring[i] )
{
    case 'a':
    case 'b':
    case 'c':
    case 'd':
    case 'e':
    {
        // do something
        break;
    }
    default:
    {
        // do something else
        break;
    }
}

在C / C ++中,如果case块没有break,则其执行将在下一个case块中继续。因此,所有5个值将执行相同的// do something代码。有些语言不这样做。

另一个选项,只是因为你的值是连续的,就是使用它:

char ch = mystring[i];
if( (ch >= 'a') && (ch <= 'e') )
{
    // do something
}
else
{
    // do something else
}

答案 1 :(得分:1)

您的代码中存在两个问题。首先,由于优先级,您的表达式被评估为:

(mystring[i] == 'a') | ('b') | ('c') | ('d') | ('e')

其次你使用按位 - 或者代替逻辑 - 或。你想要做的是每个术语都有一个完整的条件,并切换到逻辑或:

char c = mystring[i];
if (c == 'a' || c == 'b' || c == 'c' ...)

最后,如果您打算检查每个小写字母,标准库有一个islower方法可以检查:

if (islower(mystring[i])