【问题标题】:How to make a function that iterates an isalpha function work?如何使迭代 isalpha 函数的函数起作用?
【发布时间】:2015-12-31 09:32:33
【问题描述】:

我有一个程序使用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;
}

【问题讨论】:

    标签: c string function


    【解决方案1】:

    试试这个

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 如果缓冲区fgets 在您看到换行符之前填充填充,则无条件减法将出现异常。它将NUL 终止缓冲区,但它没有换行符,并且您将跳过可能对测试有意义的任意字符。
      • @ShadowRanger 谢谢。
      猜你喜欢
      • 2017-05-28
      • 1970-01-01
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 2011-02-24
      • 2019-04-23
      • 2020-10-01
      相关资源
      最近更新 更多