林江楠 发表于 2021-11-15 17:29:11

c语言函数

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



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

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



空格的个数为什莫不对


如果其他字符也打印出来怎末办

yumou 发表于 2021-11-15 17:40:38

你这个思路大体没问题,但是应该显示编译错误根本运行不了吧,你格式都错了

jackz007 发表于 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 ++)
      {
                if(str >= '0' && str <= '9') num ++                                              ;
                else if((str >= 'A' && str <= 'Z') || (str >= 'a' && str <= 'z')) alpha ++ ;
                else if(str == ' ') kongge ++                                                       ;
                else if(str == ',') d ++                                                            ;
                else if(str == '?') 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                           ;
      printf("请输入一个字符串 : ")         ;
      while((str = getchar()) != '\n') ;
      str = '\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>

林江楠 发表于 2021-11-15 17:51:56

yumou 发表于 2021-11-15 17:40
你这个思路大体没问题,但是应该显示编译错误根本运行不了吧,你格式都错了

你这跟没说一样,我就是不知道哪错了才问的呀

林江楠 发表于 2021-11-15 17:53:51

jackz007 发表于 2021-11-15 17:51
编译、运行实况:

如果把对应其他字符的个数打印出来呢,比如打印出
,的个数是什么
?的个数是什么

jackz007 发表于 2021-11-15 18:01:11

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

      3 楼代码已经添加了相应的功能,楼主可以测试。

林江楠 发表于 2021-11-15 18:14:46

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

ok

林江楠 发表于 2021-11-15 19:13:17

jackz007 发表于 2021-11-15 17:51
编译、运行实况:

第31行str里面不是有数据吗,为什莫设置为结束符

jackz007 发表于 2021-11-15 19:19:10

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

      因为这一句
while((str = getchar()) != '\n') ;
      无论 str[ i ] 是否是 '\n' 都会执行 i ++,那么,在最后 while 循环结束时,str = '\n',这个换行符显然不是我们希望的,所以,就把它直接变成字符串结束符。

林江楠 发表于 2021-11-15 19:21:08

jackz007 发表于 2021-11-15 17:51
编译、运行实况:

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

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

jackz007 发表于 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>

林江楠 发表于 2021-11-15 19:41:13

jackz007 发表于 2021-11-15 19:19
因为这一句

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

str是'\n'不就会退出循环吗,为什莫会i++

jackz007 发表于 2021-11-15 20:02:01

本帖最后由 jackz007 于 2021-11-15 20:04 编辑

林江楠 发表于 2021-11-15 19:41
str是'\n'不就会退出循环吗,为什莫会i++

       i ++ 的执行和 str[ i ] 是否是 '\n' 无关,这个是知识点,是需要死记的。

林江楠 发表于 2021-11-15 20:18:03

jackz007 发表于 2021-11-15 20:02
i ++ 的执行和 str[ i ] 是否是 '\n' 无关,这个是知识点,是需要死记的。

这。。。。。。
页: [1]
查看完整版本: c语言函数