首页 > 解决方案 > 有没有办法检查数组中字符串的大写和 isalpha 大小写?

问题描述

while(1)
    {

        char buff[1000];
        printf("Enter the word: ");
        fgets(buff, 1000, stdin);
        if(!strcmp(buff, "\n"))//empty search then break the loop
        {
            fprintf(stderr, "Exiting the program\n");
            break;
        }


        int error = 0;
        int i = 0;
        while(buff[i] != '\0')
        {

            if(buff[i] >= 33 && buff[i] <= 96)
            {
                break;
            }

            error = 1;
            i++;
        }

        if(error == 0)
        {
            fprintf(stderr, "Please enter something containing only lower-case letters\n");
        }

        }



我希望输出为hello WorldPlease enter something containing only lower-case letters但我没有收到该错误。如果我输入World hello我会得到预期的结果,它会打印错误消息。

有没有办法对整个数组使用 isalpha ?

标签: c

解决方案


有用于检查大小写的库函数。它们被称为isupperislower。使用它们。虽然它与'a'97 不同,但它可能会发生。如果您指的是字母'a',则使用字符文字'a'而不是数字 97。此外,字母甚至不能保证是连续的,因此'z'-'a'不能保证被评估为 22。但是,数字必须是连续的,所以'9'-'0'总是评估为 9。但是依靠诸如此类的库函数要安全得多isalpha。我在这里写了关于编码的文章:https ://stackoverflow.com/a/46890148/6699433

要纠正你的错误,你需要一个适当的条件。根据您的问题,如果任何字符不是小写字母或空格,它应该打印错误消息。此外,您的代码过于复杂。这是一个解决方案:

int i = 0;
while(buff[i] != '\0') {
    if(!(islower(buff[i]) || isspace(buff[i]))) {
        fprintf(stderr, "Please enter something containing only lower-case letters\n");
        break;
    }
    i++;
}

有没有办法对整个数组使用 isalpha ?

C 没有内置功能,但您可以编写自己的映射器。

/* Apply function f on each of the elements in str and return false
 * if f returns false for any of the elements and true otherwise.
 */

bool string_is_mapper(const char *str, size_t size, int (*f)(int c))
{
    for(int i=0; i<size && str[i] != '\0'; i++)
        if(!f(str[i])) return false;
    return true;
}

现在,您可以像这样使用此映射器:

if(string_is_mapper(str, strlen(str), isupper)
     puts("All characters in str is upper case");

您甚至可以将自己的函数编写到插件中,只要它们符合这个原型:

int condition(int c);

推荐阅读