islower() 适用于"!= false"但不适用于"== true"

islower() works with "!= false" but not "== true"

本文关键字:适用于 true 不适用 false islower      更新时间:2023-10-16

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

我一开始使用这个:

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

我的程序不会增加计数器,但当我把它改成这个时:

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

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

if (islower(ch) != false)

if (islower(ch) == true)

做完全相同的事情?

如果ch确实是小写字母,则islower返回一个不同于零的整数值(即true)。否则为零(即false)。

islower(ch) == true相比,如果islower返回1,则是有效的,如上所述,情况并非如此。

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

现场演示

从cplusplus.com引用关于islower():的返回值

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

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