编写一个函数,由实参传来一个字符串,统计此字符串中字母,数字,空格和其他字符的个数。

在主函数中输入字符串及输出上述结果。提示有错误,麻烦大仙改之。intalph,digit,space,others;main(){chartext[80];printf(... 在主函数中输入字符串及输出上述结果。
提示有错误,麻烦大仙改之。
int alph,digit,space,others;
main()
{
char text[80];
printf("\n输入字符串:\n");
gets(text);
printf("字符串是:");
puts(text);
strcat(text,"\n");
alph=0;
digit=0;
space=0;
others=0;
count(text);
printf("\n%d字母,%d数字,%d空格,%d其它字符\n",alph,digit,space,others);
}
count(str);
char str[];
{
int i;
for(i=0;str[i]!='\n';i++)
{
if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))
alph++;
else if(str[i]>='0'&&str[i]<='9')
digit++;
else if(str[i]==' ')
space++;
else
others++;
}
}
展开
 我来答
4747哦
2019-07-04 · TA获得超过675个赞
知道小有建树答主
回答量:365
采纳率:73%
帮助的人:72.5万
展开全部
全局变量
#include<stdio.h>
int l=0,n=0,s=0,o=0;
void count(char str[ ]);
int main()
{
char a[100];
printf("输入字符串\n");
gets (a);
count(a);
printf("字母有:%d个\n数字有:%d个\n空格有:%d个\n其他字符有:%d个\n",l,n,s,o);
}
void count(char str[])
{
for(int i=0;str[i]!='\0';i++)
{
if(str[i]==' ')
s++;
else if((str[i]<='z'&&str[i]>='a')||(str[i]<='Z'&&str[i]>='A'))
l++;
else if(str[i]<='9'&&str[i]>='0') n++;
else o++;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
826010478
2013-12-16 · TA获得超过521个赞
知道小有建树答主
回答量:920
采纳率:53%
帮助的人:289万
展开全部
函数声明在main的外面,强烈建议直接把函数写在前面省的声明了
加上字符串的头文件string.h。循环直接用strlen获取长度计算,你这样子看起来太傻了。
要返回多个整数的话可以用结构体做返回值,或者用指针(引用)做参数。
char*ch是指针的意思,初学者不行就用全局变量。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dwjchdu
2013-12-16 · TA获得超过5914个赞
知道大有可为答主
回答量:4576
采纳率:60%
帮助的人:1114万
展开全部
函数中对数组的改变是绝对的,因此,子函数中对数组做的任何改动,主函数中都可以直接使用,不需要在返回什么东西了!*ch就是指向数组ch的指针。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
元飞珍DR
2013-11-27 · TA获得超过2429个赞
知道小有建树答主
回答量:309
采纳率:95%
帮助的人:124万
展开全部

若是整个函数不使用局部变量和全局变量,是不可能的。

或者说,你是指,传递参数的时候不用全局变量传参数吗?

 

附一个我的程序,使用地址(数组的首地址)做传递参数:

#include <stdio.h>
void count_number(unsigned char input_data[],unsigned char return_addr[4])
{
    unsigned char temp,i;
 
    while(*(input_data+i)!='\0')
    {
        temp=*(input_data+i);
        if((temp>=0x41 && temp<=0x5a)||(temp>=0x61 && temp<=0x7a))    return_addr[0]+=1;     // 字母
        else if(temp>=0x30 && temp<=0x39)  return_addr[1]+=1; // 数字
        else if(temp==0x20)  return_addr[2]+=1;  // 空格
        else return_addr[3]+=1;    // 其他
        i++;
    }
}
 
int main(void)
{
    unsigned char array[40]="wr\ET3\45 t/34WQr23 Y36 R/TR5 48eY/dRg ",res[4];

    count_number(array,res);
 
    printf("字母数目:%d\n",res[0]);
    printf("数字数目:%d\n",res[1]);
    printf("空格数目:%d\n",res[2]);
    printf("其他数目:%d\n",res[3]);
    return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-11-26
展开全部

要用一个局部变量吧。

#include <stdio.h>

int function(char *str,int n)
{
    if(str==NULL)
        return 0;
    int num = 0;
    switch(n)
    {
    case 1:/*字母数*/
        while(*str!='\0')
        {
            if(('A'<=(*str)&&(*str)<='Z' )|| ('a'<=(*str)&&(*str)<='z'))
                num++;
            ++str;
        }
        return num;
        break;
    case 2:/*数字*/
        while(*str!='\0')
        {
           if('0'<=(*str) &&(*str)<='9')
                num++;
           ++str;
        }
        return num;
        break;
    case 3:/*空格*/
        while(*str!='\0')
        {
           if((*str)==' ')
                num++;
           ++str;
        }
        return num;
        break;
    default:
        return 0;
        break;
    }
}

int main()
{
    char *str_1 = "123456QPRTY88  99  *4 %4S4Tr02 1)84ru";

    printf("字母数目:%d\n",function(str_1,1));
    printf("数字数目:%d\n",function(str_1,2));
    printf("空格数目:%d\n",function(str_1,3));
    printf("其他数目:%d\n",strlen(str_1)-function(str_1,1)-function(str_1,2)-function(str_1,3));
    return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式