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

时间:2022-02-14 09:16:07
#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++;
}
}



可以通过,但是结果全都是零

11 个解决方案

#1


局部变量

#2


void sum(char *p, int &m, int &n, int &i, int &j, int &z)

#3


scanf();不要用于字符串的输入。
因为它会把空格最为输入的结束标志。

你可以使用gets()或fgets()或getchar()配上控制语句。

#4


改过来还是一样

#5


几个用来计数的全局变量,作用域不包括子函数

既然已经定义了全局变量,那就没有必要作为参数传递了;
另一种解决办法就是在C中用指针,在C++中用引用来解决问题。

#6


全局变量一直是0啊,所以你把int m=0,n=0,i=0,j=0,z=0;
放在main{}函数中啊,并且你这个程序里面好多错误。
╮(╯▽╰)╭

#7


#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++;
}
}

#8


用数组方便,下标即为个数。
参照:
#include <ctype.h>

#9



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);
}

#10


用了局部变量  换成全局变量就可以了

#11


不要用参数 直接用全局变量

#1


局部变量

#2


void sum(char *p, int &m, int &n, int &i, int &j, int &z)

#3


scanf();不要用于字符串的输入。
因为它会把空格最为输入的结束标志。

你可以使用gets()或fgets()或getchar()配上控制语句。

#4


改过来还是一样

#5


几个用来计数的全局变量,作用域不包括子函数

既然已经定义了全局变量,那就没有必要作为参数传递了;
另一种解决办法就是在C中用指针,在C++中用引用来解决问题。

#6


全局变量一直是0啊,所以你把int m=0,n=0,i=0,j=0,z=0;
放在main{}函数中啊,并且你这个程序里面好多错误。
╮(╯▽╰)╭

#7


#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++;
}
}

#8


用数组方便,下标即为个数。
参照:
#include <ctype.h>

#9



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);
}

#10


用了局部变量  换成全局变量就可以了

#11


不要用参数 直接用全局变量