鱼C论坛

 找回密码
 立即注册
查看: 1635|回复: 13

[已解决]c语言函数

[复制链接]
发表于 2021-11-15 17:29:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
编写一个函数
,统计字符串字母,数字,空格和,其他字符的个数



  1. #include <stdio.h>
  2. #define N 1024
  3. #include <ctype.h>
  4. void isgeshu(char str[])
  5. {
  6.         int num = 0,kongge = 0,i = 0,alpha = 0;
  7.         int ascii[N];
  8.         for(i = 0;str[i] != '\n';i++)
  9.         {
  10.                 if(str[i] >= '0'&&str[i] <= '9')
  11.                 {
  12.                         num++;
  13.                 }
  14.                 if(isspace(str[i);
  15.                 {
  16.                         kongge++;
  17.                 }
  18.                 if(isalpha(str[i]))
  19.                 {
  20.                         alpha++;
  21.                 }
  22.                
  23.         }
  24.         printf("数字的个数是:%d\n",num);
  25.         printf("空格的个数是:%d\n",kongge);
  26.         printf("字母的个数是%d",alpha);
  27.        
  28. }

  29. int main(void)
  30. {
  31.         int i = 0;
  32.         char str[N];
  33.         printf("请输入一个字符串:");
  34.         while((str[i++] = getchar()) != '\n');
  35.        
  36.         isgeshu(str);
  37.        
  38.         return 0;
  39. }
复制代码




空格的个数为什莫不对


如果其他字符也打印出来怎末办
最佳答案
2021-11-15 17:51:29
本帖最后由 jackz007 于 2021-11-15 18:10 编辑
  1. #include <stdio.h>

  2. #define N 1024

  3. void isgeshu(char str[])
  4. {
  5.         int num = 0 , kongge = 0 , i = 0 , alpha = 0 , others = 0 , d = 0 , w = 0                      ;
  6.         for(i = 0 ; str[i] ; i ++)
  7.         {
  8.                 if(str[i] >= '0' && str[i] <= '9') num ++                                              ;
  9.                 else if((str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z')) alpha ++ ;
  10.                 else if(str[i] == ' ') kongge ++                                                       ;
  11.                 else if(str[i] == ',') d ++                                                            ;
  12.                 else if(str[i] == '?') w ++                                                            ;
  13.                 else others ++                                                                         ;
  14.         }
  15.         printf("  数字的个数是 : %d\n" , num)                                                          ;
  16.         printf("  字母的个数是 : %d\n" , alpha)                                                        ;
  17.         printf("  空格的个数是 : %d\n" , kongge)                                                       ;
  18.         printf("  逗号的个数是 : %d\n" , d)                                                            ;
  19.         printf("  问号的个数是 : %d\n" , w)                                                            ;
  20.         printf("其他字符个数是 : %d\n" , others)                                                       ;
  21. }

  22. int main(void)
  23. {
  24.         int i = 0                             ;
  25.         char str[N]                           ;
  26.         printf("请输入一个字符串 : ")         ;
  27.         while((str[i++] = getchar()) != '\n') ;
  28.         str[i - 1] = '\0'                     ;
  29.         isgeshu(str)                          ;
  30.         return 0                              ;
  31. }
复制代码

        编译、运行实况:
  1. D:\0002.Exercise\C>g++ -o x x.c

  2. D:\0002.Exercise\C>x
  3. 请输入一个字符串 : I am a chinese, and i am 21 years old !
  4.   数字的个数是 : 2
  5.   字母的个数是 : 25
  6.   空格的个数是 : 10
  7.   逗号的个数是 : 1
  8.   问号的个数是 : 0
  9. 其他字符个数是 : 1

  10. D:\0002.Exercise\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-11-15 17:40:38 | 显示全部楼层
你这个思路大体没问题,但是应该显示编译错误根本运行不了吧,你格式都错了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-15 17:51:29 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-11-15 18:10 编辑
  1. #include <stdio.h>

  2. #define N 1024

  3. void isgeshu(char str[])
  4. {
  5.         int num = 0 , kongge = 0 , i = 0 , alpha = 0 , others = 0 , d = 0 , w = 0                      ;
  6.         for(i = 0 ; str[i] ; i ++)
  7.         {
  8.                 if(str[i] >= '0' && str[i] <= '9') num ++                                              ;
  9.                 else if((str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z')) alpha ++ ;
  10.                 else if(str[i] == ' ') kongge ++                                                       ;
  11.                 else if(str[i] == ',') d ++                                                            ;
  12.                 else if(str[i] == '?') w ++                                                            ;
  13.                 else others ++                                                                         ;
  14.         }
  15.         printf("  数字的个数是 : %d\n" , num)                                                          ;
  16.         printf("  字母的个数是 : %d\n" , alpha)                                                        ;
  17.         printf("  空格的个数是 : %d\n" , kongge)                                                       ;
  18.         printf("  逗号的个数是 : %d\n" , d)                                                            ;
  19.         printf("  问号的个数是 : %d\n" , w)                                                            ;
  20.         printf("其他字符个数是 : %d\n" , others)                                                       ;
  21. }

  22. int main(void)
  23. {
  24.         int i = 0                             ;
  25.         char str[N]                           ;
  26.         printf("请输入一个字符串 : ")         ;
  27.         while((str[i++] = getchar()) != '\n') ;
  28.         str[i - 1] = '\0'                     ;
  29.         isgeshu(str)                          ;
  30.         return 0                              ;
  31. }
复制代码

        编译、运行实况:
  1. D:\0002.Exercise\C>g++ -o x x.c

  2. D:\0002.Exercise\C>x
  3. 请输入一个字符串 : I am a chinese, and i am 21 years old !
  4.   数字的个数是 : 2
  5.   字母的个数是 : 25
  6.   空格的个数是 : 10
  7.   逗号的个数是 : 1
  8.   问号的个数是 : 0
  9. 其他字符个数是 : 1

  10. D:\0002.Exercise\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-15 17:51:56 From FishC Mobile | 显示全部楼层
yumou 发表于 2021-11-15 17:40
你这个思路大体没问题,但是应该显示编译错误根本运行不了吧,你格式都错了

你这跟没说一样,我就是不知道哪错了才问的呀
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-15 17:53:51 From FishC Mobile | 显示全部楼层
jackz007 发表于 2021-11-15 17:51
编译、运行实况:

如果把对应其他字符的个数打印出来呢,比如打印出
,的个数是什么
?的个数是什么
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-15 18:01:11 | 显示全部楼层
林江楠 发表于 2021-11-15 17:53
如果把对应其他字符的个数打印出来呢,比如打印出
,的个数是什么
?的个数是什么

        3 楼代码已经添加了相应的功能,楼主可以测试。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-15 18:14:46 | 显示全部楼层
jackz007 发表于 2021-11-15 18:01
3 楼代码已经添加了相应的功能,楼主可以测试。

ok
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-15 19:13:17 | 显示全部楼层
jackz007 发表于 2021-11-15 17:51
编译、运行实况:

第31行str[i - 1]里面不是有数据吗,为什莫设置为结束符
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-15 19:19:10 | 显示全部楼层
林江楠 发表于 2021-11-15 19:13
第31行str里面不是有数据吗,为什莫设置为结束符


        因为这一句
  1. while((str[i++] = getchar()) != '\n') ;
复制代码

        无论 str[ i ] 是否是 '\n' 都会执行 i ++,那么,在最后 while 循环结束时,str[i - 1] = '\n',这个换行符显然不是我们希望的,所以,就把它直接变成字符串结束符。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-15 19:21:08 | 显示全部楼层
jackz007 发表于 2021-11-15 17:51
编译、运行实况:


为什莫我的代码编译运行实况是这样的

请输入一个字符串:jwidas123
数字的个数是:3
空格的个数是:10
字母的个数是:0
其他字符的个数是10

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-15 19:27:35 | 显示全部楼层
林江楠 发表于 2021-11-15 19:21
为什莫我的代码编译运行实况是这样的

请输入一个字符串:jwidas123

        你的代码显然不是 3 楼的,看看我用 3 楼代码的运行实例:
  1. D:\00.Excise\C>x
  2. 请输入一个字符串 : jwidas123
  3.   数字的个数是 : 3
  4.   字母的个数是 : 6
  5.   空格的个数是 : 0
  6.   逗号的个数是 : 0
  7.   问号的个数是 : 0
  8. 其他字符个数是 : 0

  9. D:\00.Excise\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-15 19:41:13 | 显示全部楼层
jackz007 发表于 2021-11-15 19:19
因为这一句

        无论 str[ i ] 是否是 '\n' 都会执行 i ++,那么,在最后 while 循环结 ...

str[i]是'\n'不就会退出循环吗,为什莫会i++
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-15 20:02:01 From FishC Mobile | 显示全部楼层
本帖最后由 jackz007 于 2021-11-15 20:04 编辑
林江楠 发表于 2021-11-15 19:41
str是'\n'不就会退出循环吗,为什莫会i++


       i ++ 的执行和 str[ i ] 是否是 '\n' 无关,这个是知识点,是需要死记的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-15 20:18:03 | 显示全部楼层
jackz007 发表于 2021-11-15 20:02
i ++ 的执行和 str[ i ] 是否是 '\n' 无关,这个是知识点,是需要死记的。

这。。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-25 13:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表