如何使迭代isalpha函数的函数工作?

时间:2015-10-03 06:24:33

标签: c string function

我有一个使用isalpha比较字符串中每个元素的程序。我输入一个字符串,它调用函数循环遍历数组并检查所有字符是否都是字母。如果是,则打印为true,否则为false。我的问题是,我似乎无法使其正常工作。它每次都会返回false。

#include <stdio.h>
#include <string.h>

int isAlpha(char string[]);

int main()
{
    char str[100];
    int bool;

    printf("Enter a string to check: \n");
    fgets(str, 100, stdin);

    bool = isAlpha(str);
    if(bool != 0)
    {
        printf("True\n");
    }
    else if(bool == 0)
    {
        printf("False\n");
    }
    return 0;   
}

int isAlpha(char string[])
{
    int i, check, len = strlen(string);
    for(i = 0; i < len; i++)
    {
        if(isalpha(string[i]))
        {
            check = 1;
        }
        else
        {
            check = 0;
            break;
        }
    }
    return check;
}

2 个答案:

答案 0 :(得分:4)

如果用户输入abc,则fgets返回的字符串将为abc\n\0。换句话说,它是始终未通过isalpha测试的换行符。您可以通过从字符串长度中减去一个来解决问题。您还应初始化check变量,因为循环体可能永远不会运行,例如如果用户按下回车而没有输入任何内容。

int i, check = 0;
int len = strlen(string) - 1;
for(i = 0; i < len; i++)

正如@ShadowRanger在评论中指出的那样,C中没有什么是简单的。为了绝对安全,你应该从字符串中删除换行符,如下所示

int i, check = 0;
string[strcspn(string, "\n")] = '\0';
int len = strlen(string);
for(i = 0; i < len; i++)

答案 1 :(得分:2)

试试这个

int isAlpha(char string[])
{
    int i = 0, len = strlen(string);
    for(i = 0; isalpha(string[i]); i++); // cycle through string until characters are alphabet characters

    return i == len - 1;
    /* this has to be true if all characters are alpha */
}

要解决您的问题,请执行以下操作:

for(i = 0; i < len - 1; i++)