我正在试图找出字符串中是否包含单词
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,但我无法正常工作。我希望它评估为真 只有它=一个字母。
答案 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])