首页 > 解决方案 > 如何在c中打印大写,小写和数字

问题描述

我正在做作业,我需要一些帮助。

所以这是代码

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int i;
    int upper=0,lower=0,number = 0;
    char ch[500];
    printf("Enter the String:\n");
    gets(ch);
    i=0;
    while(ch[i]!=0)
    {
        if(ch[i]>='A' && ch[i]<='Z')
        {
            upper++;
        }
        else if(ch[i]>='a' && ch[i]<='z')
        {
            lower++;
        }
        else if(ch[i]>='0' && ch[i]<='9')
        {
            number++;
        }
        i++;
    }
printf("lowercase letters: %d",lower);
printf("\nuppercase letters: %d",upper);
printf("\nnumber letters: %d",number);
getch();
    return 0;
}

正如你在这里看到的。当你给出一个字符串输入时。该代码将给出大写,小写和数字的总数

例如:如果我给代码“Hello World 123”。结果将是 2 个大写字母 8 个小写字母和 3 个数字

问题是任务要我分别打印所有 3 种类型的字母

例如: from "Hello World 123" 应该打印 "HW" , "elloorld" 和 "123"

我知道我必须创建另外 3 个数组来分隔字母。我尝试创建类似 upperc[i],lowerc[i] 和 num[i] 来在每个if命令中输入字母,但它不起作用。

那么我该怎么做呢?

标签: cstringnumbersuppercaselowercase

解决方案


这是一种解决方法。它不需要像您想象的那样需要 3 个单独的数组,因为它直接打印字符:

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

int main(void)
{
    printf("Enter a string: ");
    char str[1024] = {0};
    fgets(str, sizeof str, stdin);
    
    // Use different functions in each iteration
    int (*ctype_fns[])(int) = {isupper, islower, isdigit};

    for (unsigned i = 0; i < sizeof ctype_fns / sizeof *ctype_fns; ++i)
    {
        for (const char *it = str; *it; ++it)
        {
            // If char matches requirements, print it
            if (ctype_fns[i]((unsigned char)*it))
                putchar(*it);
        }
        putchar('\n');
    }
}

运行示例:

Enter a string: Hello World 123
HW
elloorld
123

推荐阅读