islower() 适用于“!= false”,但不适用于“== true”

use*_*033 2 c++ comparison-operators

因此,我编写了一个基本程序,用于检查字符串中的小写元音并显示找到的数量。

我一开始用的是这个:

for (char ch : str)
    {
        if (islower(ch) == true && isVowel(ch) == true) //isVowel is a function that
            strCount++;                                 //I made
    }
Run Code Online (Sandbox Code Playgroud)

我的程序不会增加计数器,但是当我将其更改为:

for (char ch : str)
    {
        if (islower(ch) != false && isVowel(ch) == true)
            strCount++;
    }
Run Code Online (Sandbox Code Playgroud)

它立即开始工作。为什么?不

if (islower(ch) != false)
Run Code Online (Sandbox Code Playgroud)

if (islower(ch) == true)
Run Code Online (Sandbox Code Playgroud)

做完全相同的事情?

101*_*010 5

islowertrue如果确实ch是小写字母,则返回不为零的整数值(即)。否则为零(即false)。

比较一下,如果returnislower(ch) == true则有效,但如上所述,情况并非如此。islower1

因此,它理所当然地islower(ch) == true不会按您的预期工作。

LIVE DEMO

  • 可能应该强调的是,你永远不应该明确地与“true”进行比较——它是多余的并且有潜在的危险。 (3认同)

Adr*_*hum 5

引用自 cplusplus.com 关于返回值islower()

如果 c 确实是小写字母,则值不同于零(即 true)。否则为零(即假)。

所以,只需做if (islower(ch))而不是if (islower(ch) == true)