isalpha()函数为string中的字符返回false

时间:2014-01-17 09:53:31

标签: c++ string debugging

我试图通过使用预定义函数foo

检查字符串isalpha()中的每个字符来计算字符串中的字母数
#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;


int main()
{
    string foo = "aaaaaaa1";

    int count=0;

    for (int i=0;i<foo.length();i++)
    {
        if ( isalpha(foo[i]) == true)
        {
            count++;
        }
    }

    cout<<count;

    system("PAUSE");
}

预期产出:

  

7

当前输出:

  

0

错误是function isalpha is not returning true for alphabetic

有人可以向我解释为什么以及如何解决问题以检查给定字符是否是字母

2 个答案:

答案 0 :(得分:12)

isalpha的返回类型为int,而非bool(来自C)。检查失败时返回0,成功时返回非零值。请注意,在这种情况下,它不必返回1。

inttrue进行比较会将true提升为整数1.然后,对于1以外的整数,比较失败。

您永远不应该通过与truefalse进行比较来检查逻辑值 - 而是依赖于值或隐式转换:

if ( isalpha(foo[i]) )
{
  count++;
}

Live example

答案 1 :(得分:9)

isalpha()会返回int。您应该检查它是否返回与0不同的值。