c - 如何使迭代 isalpha 函数的函数起作用?

标签 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;
}

最佳答案

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

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++)

关于c - 如何使迭代 isalpha 函数的函数起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32919597/

相关文章:

c++ - 从字符串中取出整数 C++

jQuery 循环 .each 函数

python - 递归分数(python)

c - 无论如何,如何在 C 中使用已声明但未定义的函数?

将 for 循环转换为 if

c++ - 如何使用 CTypes 将 wchar_t**(UNICODE 字符串的 null 终止数组)返回到 Python 脚本

Python-文字游戏 "Ghost"、文件 I/O 和列表问题

c# - 找出两个字符串是否模糊的最快方法是什么? [不是另一个 Levenshtein 帖子]

c - valgrind 无效读取大小

从 c 调用汇编函数导致段错误