代码之家  ›  专栏  ›  技术社区  ›  David Stocking

isalpha(<mychar>)==true计算结果为false?

c++
  •  5
  • David Stocking  · 技术社区  · 16 年前

    字符串temp等于调试器中的“ZERO:\t.WORD\t1”(文件的第一行)

    string temp = RemoveWhiteSpace(data);
    int i = 0;
    if ( temp.length() > 0 && isalpha(temp[0]) )
        cout << "without true worked" << endl;
    if ( temp.length() > 0 && isalpha(temp[0]) == true )
        cout << "with true worked" << endl;
    

    这是我用来检查temp的第一个字符是否是a-z,a-z的代码。第一个if语句的计算结果为true,第二个为false。为什么?即使没有“temp.length()>”,我也尝试过这样做;0&&”它仍然是假的。它只是讨厌“==真”。我唯一能想到的就是isalpha()返回!=0和true==1。然后,可以得到isalpha()==2!=1、但是我不知道C++是不是…奇怪的。

    顺便说一句,我不需要知道“==true”在逻辑上是没有意义的。我知道。

    输出为

    without true worked
    

    在Ubuntu 9.10上使用GNU GCC编译代码块(如果这很重要的话)

    4 回复  |  直到 16 年前
        1
  •  9
  •   Jerry Coffin    16 年前

    例如。:

    #define __digit 1
    #define __lower 2
    #define __upper 4
    extern int __type_table[];
    
    int isdigit(int c) { 
        return __type_table[c+1] & __digit;
    }
    
    int isalpha(int c) { 
        return __type_table[c+1] & (__lower | __upper);
    }
    
    int islower(int c) { 
        return __type_table[c+1] & __lower;
    }
    
    int isupper(int c) { 
        return __type_table[c+1] & __upper;
    }
    

    在哪里? __type_table int __type_table[UINT_MAX+1]; 会被初始化(例如) __type_table['0'+1] == __digit __type_table['A'+1] == __upper .

    EOF (通常定义为-1)。

        2
  •  2
  •   avakar    16 年前

    isalpha 不会再回来了 true ,则返回非零。这对于为C设计的API来说是很常见的。

    注意在表达式中 isalpha(ch) == true ,子表达式 是的 已升级为类型 int

        3
  •  0
  •   Ben Voigt    16 年前

    好吧,文档表明它返回零或非零,不一定只是假或真。所以你最好检查一下(isalpha(temp[0])!=0).

        4
  •  0
  •   osgx    16 年前

    isalpha(ch) == true ,但是 !!isalpha(ch) == true