如何检查用户提供的输入中是否存在所有大写字母?

How to check if all the upper-case letters are present in the input the user gives?

我正在尝试检查用户输入的内容中是否存在所有大写字母。

我尝试创建一个包含 26 个值的数组,0 表示 A,25 表示 Z。首先我将值初始化为 0。

之后我要求用户输入,然后检查它是否与 ASCII 匹配。如果是,我将数组值更改为 1.

之后,我确保所有的数组值都是1;如果是,所有字母都在输入中。

我假设用户将以 0 结束输入。

输入是“Q$@UICK BROWN FOX JUMPS OVER tHe LAZY DOG!0”。

这是代码:

#include <stdio.h>

int main()
{
int z;
int x = 1;
int arr[26] = {0};

printf("enter a sentance to check if all latter in ABC are in the sentance (in upper case):\n");

while (x!=0) {
    scanf(" %d", &x);
    z = x - 65;
    if (z>=0 && z<=25) {
       arr[z]=1;
    }
}

z=0;
while (arr[z]==1 && z<26) {
    ++z;
    if (z==26) {
        printf("all the ABC in ur sentance\n");
        break;
    }
}

 printf("all the ABC does not in ur sentance\n");

    return 0;
}

没有输出,我想是因为scanf有问题,但我不知道如何解决。

  • %d scanf() 中的格式说明符用于读取整数,而不是字符。在这种情况下,您应该使用 getchar() 而不是 scanf() 来读取字符 one-by-one.
  • 字符 0 没有值 0。(在 ASCII 中为 48)。
  • 使用 65 这样的幻数并不好。在这种情况下,使用像 'A' 这样的字符常量应该可以使意思清楚。

部分

while (x!=0) {
    scanf(" %d", &x);
    z = x - 65;
    if (z>=0 && z<=25) {
       arr[z]=1;
    }
}

应该是:

while ((x = getchar()) != '0' && x != EOF) {
    z = x - 'A';
    if (z>=0 && z<=25) {
       arr[z]=1;
    }
}

另请注意,即使在打印 "all the ABC in ur sentance\n" 之后,也会打印 "all the ABC does not in ur sentance\n"。您应该使用 return 0; 而不是 break; 来完成函数的执行并防止输出额外的字符串。

您需要使用%c来读取一个字符并将其转换为字符代码。 %d 读取整数的表示。

如果字符0结束输入,则需要与'0'比较,而不是0

您可以使用 isupper() 来测试一个字符是否为大写字母,而不用自己测试范围。

检查是否输入了所有字符的循环可以简化,如下所示。

#include <stdio.h>
#include <ctype.h>

int main()
{
    int z;
    char x;
    int arr[26] = {0};

    printf("enter a sentance to check if all latter in ABC are in the sentance (in upper case):\n");

    while (1) {
        scanf(" %c", &x);
        if (x == '0') {
            break;
        }
        if (isupper(x)) {
            z = x - 'A';
            arr[z]=1;
        }
    }

    for (z = 0; z < 26; z++) {
        if (arr[z] == 0) {
            printf("all the ABC are not in your sentance\n");
            return 0;
        }
    }
    printf("all the ABC in your sentance\n");

    return 0;
}