鱼C论坛

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

[已解决]c语言函数

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

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

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

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


#include <stdio.h>
#define N 1024
#include <ctype.h>
void isgeshu(char str[])
{
        int num = 0,kongge = 0,i = 0,alpha = 0;
        int ascii[N];
        for(i = 0;str[i] != '\n';i++)
        {
                if(str[i] >= '0'&&str[i] <= '9')
                {
                        num++;
                }
                if(isspace(str[i);
                {
                        kongge++;
                }
                if(isalpha(str[i]))
                {
                        alpha++;
                }
                
        }
        printf("数字的个数是:%d\n",num);
        printf("空格的个数是:%d\n",kongge);
        printf("字母的个数是%d",alpha);
        
}

int main(void)
{
        int i = 0;
        char str[N];
        printf("请输入一个字符串:");
        while((str[i++] = getchar()) != '\n');
        
        isgeshu(str);
        
        return 0;
}



空格的个数为什莫不对


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

#define N 1024

void isgeshu(char str[])
{
        int num = 0 , kongge = 0 , i = 0 , alpha = 0 , others = 0 , d = 0 , w = 0                      ;
        for(i = 0 ; str[i] ; i ++)
        {
                if(str[i] >= '0' && str[i] <= '9') num ++                                              ;
                else if((str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z')) alpha ++ ;
                else if(str[i] == ' ') kongge ++                                                       ;
                else if(str[i] == ',') d ++                                                            ;
                else if(str[i] == '?') w ++                                                            ;
                else others ++                                                                         ;
        }
        printf("  数字的个数是 : %d\n" , num)                                                          ;
        printf("  字母的个数是 : %d\n" , alpha)                                                        ;
        printf("  空格的个数是 : %d\n" , kongge)                                                       ;
        printf("  逗号的个数是 : %d\n" , d)                                                            ;
        printf("  问号的个数是 : %d\n" , w)                                                            ;
        printf("其他字符个数是 : %d\n" , others)                                                       ;
}

int main(void)
{
        int i = 0                             ;
        char str[N]                           ;
        printf("请输入一个字符串 : ")         ;
        while((str[i++] = getchar()) != '\n') ;
        str[i - 1] = '\0'                     ;
        isgeshu(str)                          ;
        return 0                              ;
}
        编译、运行实况:
D:\0002.Exercise\C>g++ -o x x.c

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

D:\0002.Exercise\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

#define N 1024

void isgeshu(char str[])
{
        int num = 0 , kongge = 0 , i = 0 , alpha = 0 , others = 0 , d = 0 , w = 0                      ;
        for(i = 0 ; str[i] ; i ++)
        {
                if(str[i] >= '0' && str[i] <= '9') num ++                                              ;
                else if((str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z')) alpha ++ ;
                else if(str[i] == ' ') kongge ++                                                       ;
                else if(str[i] == ',') d ++                                                            ;
                else if(str[i] == '?') w ++                                                            ;
                else others ++                                                                         ;
        }
        printf("  数字的个数是 : %d\n" , num)                                                          ;
        printf("  字母的个数是 : %d\n" , alpha)                                                        ;
        printf("  空格的个数是 : %d\n" , kongge)                                                       ;
        printf("  逗号的个数是 : %d\n" , d)                                                            ;
        printf("  问号的个数是 : %d\n" , w)                                                            ;
        printf("其他字符个数是 : %d\n" , others)                                                       ;
}

int main(void)
{
        int i = 0                             ;
        char str[N]                           ;
        printf("请输入一个字符串 : ")         ;
        while((str[i++] = getchar()) != '\n') ;
        str[i - 1] = '\0'                     ;
        isgeshu(str)                          ;
        return 0                              ;
}
        编译、运行实况:
D:\0002.Exercise\C>g++ -o x x.c

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

D:\0002.Exercise\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你这跟没说一样,我就是不知道哪错了才问的呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

如果把对应其他字符的个数打印出来呢,比如打印出
,的个数是什么
?的个数是什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

        3 楼代码已经添加了相应的功能,楼主可以测试。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

ok
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

第31行str[i - 1]里面不是有数据吗,为什莫设置为结束符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


        因为这一句
while((str[i++] = getchar()) != '\n') ;
        无论 str[ i ] 是否是 '\n' 都会执行 i ++,那么,在最后 while 循环结束时,str[i - 1] = '\n',这个换行符显然不是我们希望的,所以,就把它直接变成字符串结束符。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

请输入一个字符串:jwidas123

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

D:\00.Excise\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

str[i]是'\n'不就会退出循环吗,为什莫会i++
想知道小甲鱼最近在做啥?请访问 -> 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' 无关,这个是知识点,是需要死记的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

这。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 23:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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