输入字符串,输出大写字母,小写字母,数字,空格和其他符号的个数

陈思有 2011-03-16 09:49:42
#include <stdio.h>
int m=0,n=0,i=0,j=0,z=0;
void main()
{
void sum(char *p, int m, int n, int i, int j, int z);
char a[100],*p;


p=a;
scanf("%s",p);
sum(p,m,n,i,j,z);
printf("%d,%d,%d,%d,%d",m,n,i,j,z);
}

void sum(char *p, int m, int n, int i, int j, int z)
{
for ( ; *p!='\0'; p++)
{
if (*p==' ')
m++;
else if (('0'<=*p)&&(*p<='9'))
n++;
else if (('A'<=*p)&& (*p<='Z'))
i++;
else if (('a'<=*p)&&(*p<='z'))
j++;
else
z++;
}
}



可以通过,但是结果全都是零
...全文
1652 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
shihaobin 2011-03-17
  • 打赏
  • 举报
回复
全局变量一直是0啊,所以你把int m=0,n=0,i=0,j=0,z=0;
放在main{}函数中啊,并且你这个程序里面好多错误。
╮(╯▽╰)╭
無_1024 2011-03-17
  • 打赏
  • 举报
回复
不要用参数 直接用全局变量
無_1024 2011-03-17
  • 打赏
  • 举报
回复
用了局部变量 换成全局变量就可以了
千杯不醉-sen 2011-03-17
  • 打赏
  • 举报
回复

void main()
{
int i;
int len; //存字符串长度
char arr[200]; //存放字符串
int num[4] = {0};//用于计数//亦可以定义4个变量
printf("/***统计字符串中的各字符个数***/\n");
printf("请任意输入一串字符:\n");
gets(arr);
len = strlen(arr);
for(i=0;i<len;i++)
{
if(arr[i]>='0'&&arr[i]<='9')
num[0]++;
else if(arr[i]==' ')
num[1]++;
else if(arr[i]>='A'&&arr[i]<='Z' || arr[i]>='a'&&arr[i]<='z')
num[2]++;
else num[3]++;
}
printf("统计结果如下:\n");
printf("共有数字%d个!\n",num[0]);
printf("共有空格%d个!\n",num[1]);
printf("共有字母%d个!\n",num[2]);
printf("其他字符共有%d个!\n",num[3]);
printf("共有字符%d个!\n",len);
}
千杯不醉-sen 2011-03-17
  • 打赏
  • 举报
回复
用数组方便,下标即为个数。
参照:
#include <ctype.h>
software工程师 2011-03-17
  • 打赏
  • 举报
回复
#include <stdio.h>
int m=0,n=0,i=0,j=0,z=0;
void main()
{
void sum(char *p);//用全局变量传递,无需定义局部变量参数
char a[100];
gets(a);//整行输入
//scanf("%s",p);//scanf遇到空格就结束了,无法符合要求
sum(p,m,n,i,j,z);
printf("%d,%d,%d,%d,%d",m,n,i,j,z);
}

void sum(char *p)
{
for ( ; *p!='\0'; p++)
{
if (*p==' ')
m++;
else if (('0'<=*p)&&(*p<='9'))
n++;
else if (('A'<=*p)&& (*p<='Z'))
i++;
else if (('a'<=*p)&&(*p<='z'))
j++;
else
z++;
}
}
moorsf 2011-03-16
  • 打赏
  • 举报
回复
几个用来计数的全局变量,作用域不包括子函数

既然已经定义了全局变量,那就没有必要作为参数传递了;
另一种解决办法就是在C中用指针,在C++中用引用来解决问题。
陈思有 2011-03-16
  • 打赏
  • 举报
回复
改过来还是一样
AoBeiLunSi 2011-03-16
  • 打赏
  • 举报
回复
scanf();不要用于字符串的输入。
因为它会把空格最为输入的结束标志。

你可以使用gets()或fgets()或getchar()配上控制语句。
delphiwcdj 2011-03-16
  • 打赏
  • 举报
回复
void sum(char *p, int &m, int &n, int &i, int &j, int &z)
delphiwcdj 2011-03-16
  • 打赏
  • 举报
回复
局部变量

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧