【问题标题】:isalpha() function returns false for character in stringisalpha() 函数对字符串中的字符返回 false
【发布时间】:2014-01-17 09:53:30
【问题描述】:

我试图通过使用预定义函数isalpha()检查字符串foo中的每个字符来计算字符串中的字母数

#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

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

【问题讨论】:

标签: c++ string debugging


【解决方案1】:

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

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

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

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

Live example

【讨论】:

    【解决方案2】:

    isalpha() 返回一个int。你应该检查它是否返回一个不同于0的值。

    【讨论】:

    • 如果返回值不是零,则无需显式比较。只需检查“真实”的回报即可。
    猜你喜欢
    • 2011-12-04
    • 2017-12-14
    • 1970-01-01
    • 2011-07-09
    • 2015-07-31
    • 2017-05-05
    • 1970-01-01
    • 2013-12-06
    相关资源
    最近更新 更多