c - 如何在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命令中输入字母,但它不起作用。
那么我该怎么做呢?
解决方案
这是一种解决方法。它不需要像您想象的那样需要 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
推荐阅读
- android - 如何在android中发送数组作为参数
- javascript - 单击任何其他父菜单的子菜单或同一子菜单时如何关闭多个子菜单
- c++ - 在 gdb 和 gdbserver 中调试时有什么方法可以制作钩子吗?
- python - 如何从列表中一次显示一个元素而不在 Python 中重复相同的元素
- ios - 集合视图单元格未正确显示
- html - 如何使用 htaccess 从 url 中删除 .html 用于 tomcat 服务器
- reactjs - 如何从单独的组件调用组件中的函数?
- swift - Swift/Firestore/Cloud Functions - 向随机用户发送消息
- java - 要打印的字符串包含 3 个字母后跟 7 个数字
- xml - 使用 Camel 将 java.util.Date 存储为标头中的 java.util.Date