指针_习题:输入一个字符串,将里面的数字、字母、其他符号筛选出来

本文介绍了一个简单的C语言程序,该程序可以接收用户输入的字符串,并将其分为数字、字母和其他符号三类。通过遍历字符串并检查每个字符的ASCII值,程序能够准确地进行分类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

输入一个字符串,将里面的数字、字母、其他符号筛选出来!

# include <stdio.h>
# include <string.h>

void main(void)
{
char *p,str[20], sz[20], zm[20], qt[20];
int i = 0, n, a, b, c;
a = b = c = 0;
printf("Input string:");
gets(str);
p = str;
n = strlen(str);
while(i<n)
{
if (*(p+i)>='0'&&*(p+i)<='9')
sz[a++] = *(p+i);
else if(*(p+i)>='a'&&*(p+i)<='z'||*(p+i)>='A'&&*(p+i)<='Z')
zm[b++] = *(p+i);
else
qt[c++] = *(p+i);
i++;
}
sz[a] = '\0'; zm[b] = '\0'; qt[c] = '\0';//添加串结束标志;
puts(sz); //输出数字字符;
puts(zm); //输出字母字符;
puts(qt); //输出其他字符
}
/*
--------------------------
Input string:abc52#*69JKL13
526913
bcJKL
#*
--------------------------
*/


<think>好的,用户需要一段C语言代码来统计字符串中的数字、英文字母、空格和其他字符的数量。我先回忆一下相关的知识。 首先,C语言中处理字符串需要用到字符数组,并且每个字符可以通过ASCII码来判断类型。根据引用[2]和[3],通常的做法是遍历字符串的每个字符,然后使用条件判断进行分类。 接下来,需要考虑如何区分不同的字符类别。数字字符在'0'到'9'之间,字母分为大写和小写,分别位于'A'-'Z'和'a'-'z'。空格字符就是' '。其他不属于这些的归为其他字符。 然后,函数的结构。主函数需要获取用户输入字符串,可能使用gets()或fgets(),但要注意缓冲区溢出的问题。然后调用统计函数,这个函数接收字符串指针和四个整型指针参数,分别记录各个类别的数量。或者像引用[3]那样,使用数组来存储统计结果。 比如引用[4]中的代码,通过循环遍历每个字符,使用多个if-elseif结构来判断字符类型,并递增对应的计数器。这种方法逻辑清晰,适合初学者理解。 还要注意字符串的结束符'\0',循环终止条件应该是当前字符是否为'\0'。此外,输入字符串时可能需要处理换行符,特别是用fgets()的时候,会包含换行符,需要判断是否去除。 然后,代码的健壮性。比如处理空指针,或者空字符串的情况,但用户的问题可能不需要那么复杂,基础实现即可。 测试用例方面,比如输入"Hello World 123!",应该统计字母10个,数字3个,空格2个,其他1个(感叹号)。 最后,根据引用中的示例,输出结果需要用printf显示各统计值,如引用[3]中的格式。可能还需要考虑中文字符或其他扩展字符,但问题中没提到,所以默认处理标准ASCII字符。 综上,代码的大体结构是:输入字符串,初始化计数器,遍历字符,分类统计,输出结果。需要注意字符的范围判断和循环的正确终止。</think>### C语言统计字符串字符类型数量实现步骤 1. **输入处理** 使用`fgets()`函数获取用户输入字符串(包含空格),并处理末尾可能存在的换行符: ```c char input[100]; fgets(input, sizeof(input), stdin); input[strcspn(input, "\n")] = '\0'; // 去除换行符 ``` 2. **字符分类判断逻辑** 通过ASCII码范围判断字符类型: - 数字:`c >= '0' && c <= '9'` - 大写字母:`c >= 'A' && c <= 'Z'` - 小写字母:`c >= 'a' && c <= 'z'` - 空格:`c == ' '` 3. **完整实现代码** ```c #include <stdio.h> #include <string.h> void count_characters(char *str, int *alpha, int *digit, int *space, int *other) { for (int i = 0; str[i] != '\0'; i++) { char c = str[i]; if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) { (*alpha)++; } else if (c >= '0' && c <= '9') { (*digit)++; } else if (c == ' ') { (*space)++; } else { (*other)++; } } } int main() { char str[100]; int alpha = 0, digit = 0, space = 0, other = 0; printf("输入字符串: "); fgets(str, sizeof(str), stdin); str[strcspn(str, "\n")] = '\0'; // 移除换行符 count_characters(str, &alpha, &digit, &space, &other); printf("字母: %d\n数字: %d\n空格: %d\n其他字符: %d\n", alpha, digit, space, other); return 0; } ``` 4. **执行示例** 输入`"Hello World 123!"`将输出: ``` 字母: 10 数字: 3 空格: 2 其他字符: 1 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值