统计字符串中字母、数字以及其他字符的个数,并把统计结果在主函数中输出。

一. 定义整形数组实现

466c146a80434787bc30644da3b15cc7.jpg

 在主函数中,首先要创建一个足够大的字符数组,char[x],x根据你所输入的字符串大小来确定,能装得下就行,用来存储字符串。

传值调用中,return只能传回一个值,所以不能采用这种方式。

由题目可知,需要传回的是字母,数字,其他字符的个数。也就说,需要传回三个值,这时我们自然而然的想到了用一个数组来存放这三个值。因此,我们定义一个整形数组int num[]来存放,字母,数字,其他字符的个数。

通过gets()将字符串输入。

通过自定义的jishu函数,将字符串,num数组传给jishu函数,并在jishu函数中计算得到三个数据的具体值,同时存放进num数组中。

最后,通过printf,将结果输出在显示屏上。

 9116e559cca74cfb9971d44af2a0a248.jpg

 

 for循环中的判断条件也可以写成s[i]!='/0'。目的是遇到字符串结束标志就挑出循环。

通过if else语句,逐一的对字符串中每个字符进行判断。如果条件成立,就存储到相应的数组中。由于num是数组,其内部空间是一致的。所以在jishu函数中改变,也会影响到主函数中num的变化。

代码如下:

#include <stdio.h>

void main()

{

    void jishu(char s[],int num[3]);

    char arr[10];

    int num[3]={0};

    printf("请输入字符串");

    gets(arr);

    jishu(arr,num);

    printf("字母:%d\n数字:%d\n字符%d\n",num[0],num[1],num[2]);

 

}

void jishu(char s[],int num[])

{

    int i;

    for(i=0; s[i]; i++)

    {

        if('a'<=s[i]&&s[i]<='z'||'A'<=s[i]&&s[i]<='Z')

            num[0]++;

        else if('0'<=s[i]&&s[i]<='9')

            num[1]++;

        else

            num[2]++;

     }

}

二.定义全局变量实现

a894c37561384484b8c5cc2a4ed546f9.jpg

全局变量:

在函数之外定义的变量称为全局变量,也称为外部变量。有效范围为从定义变量的位置开始到本源文件结束。全局变量在编译时分配内存,且在程序的全部执行中都占用内存。

通过上述定义可以得知,我们定义的sz,zm,zf这三个变量,其不但可以在主函数中起作用,同时也可以在自定义的jishu函数中起作用。在编译时分配内存,全部执行中都占用内存意味着,自定义jishu函数中的变量与主函数中的变量一直共用一块空间,所以可以相互影响。

10d6d4ec885a446ca09a143fe8e8575c.jpg

 这时,我们只需要向自定义的jishu函数传入一个字符串。所以,形参只有一个字符数组就行。

 

代码如下:

#include <stdio.h>

int sz=0,zm=0,zf=0;

void main()

{

    void jishu(char s[]);

    char arr[10];

    printf("请输入字符串");

    gets(arr);

    jishu(arr);

    printf("字母:%d\n数字:%d\n字符%d\n",sz,zm,zf);

 

}

void jishu(char s[])

{

    int i;

    for(i=0; s[i]; i++)

    {

        if('a'<=s[i]&&s[i]<='z'||'A'<=s[i]&&s[i]<='Z')

            zm++;

        else if('0'<=s[i]&&s[i]<='9')

            sz++;

        else

            zf++;

     }

}

附:变量重要概念

变量的作用域:指变量能被读写访问的范围,与变量定义位置密切相关。

按作用域不同,变量可以分为局部变量和全局变量。

局部变量:在一个函数内部定义的变量称为局部变量,也称内部变量。有效范围为从定义变量的位置开始到本函数或本复合语句结束。局部变量在函数调用时分配内存,调用结束,内存被释放。(这一点也就注定了,不同函数内的变量根本无法相互影响,名称无论相不相同,其内部空间根本就不一样。)

同时需要注意,当全局变量和局部变量重名时。由定义可知,他们都有可能起作用,但究竟是谁起作用呢。通俗来讲,强龙不压地头蛇。这全局变量是条强龙,但是在局部变量的地盘上还得是局部变量这地头蛇作用做主。

即,若在同一源程序文件中,全局变量与局部变量同名,则在局部变量的作用范围内,全局变量被屏蔽,不起作用。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值