有一篇文章,共有3行文字,每行有个80字符.要求分别统计出其中英文大写字母,小写
#include <string.h>
int main()
{
char a[3][81];
int i,j,len;
int num[5]={0,0,0,0,0};
for(i=0;i<3;i++)
gets(a[i]);
for(i=0;i<3;i++)
{
len=strlen(a[i]);
for(j=0;j<len;j++)
{
if(a[i][j]>='a'&&a[i][j]<='z')
num[0]++;
else if(a[i][j]>='A'&&a[i][j]<='Z')
num[1]++;
else if(a[i][j]==' ')
num[2]++;
else if(a[i][j]>='1'&&a[i][j]<='9')
num[3]++;
else
num[4]++;
}
}
printf("英文小写字母、大写字母、空格、数字、其他字符的个数分别为%d,%d,%d,%d,%d\n",num[0],num[1],num[2],num[3],num[4]);
} 展开
1、gets(str[i][j]); 这一句中j没赋值,而且把字符串送给一个字符型二维数组的元素是行不通的,通不过编译;你可以改成gets(str[i]),但是只能输入一行,因为gets()虽然不会将空格识别为'\0',但它把回车视为'\0';
这一句最好改成for(;i<=2;gets(str[i]),i++);,这里分号别忘了,表示for的循环是空语句,实际起作用的是第三项里的表达式,结束后i=2,下一句for语句要把i再次赋0。
2、while(str[i][j]!='\0') 这一句中j同样没赋值,通不过编译;你可以将这一句去掉,把下面for(j=0;j<=1;j++)这一句改成for(j=0;j<=1&&str[i][j]!='\0';j++)。
程序变为:
#include<stdio。h>
#include<string。h>
int main()
{
char str[3][2];
int space=0,letter=0,digit=0,other=0;
int i=0,j;
for(i=0;i<=2;gets(str[i]),i++); //这一句变了
/*while(str[i][j]!='\0')*/ //这一句去掉了
for(i=0;i<=2;i++) //这一句i重新赋0
{
for(j=0;j<=1&&str[i][j]!='\0';j++) //这一句变了
if((str[i][j]<='Z'&&str[i][j]>='A')||(str[i][j]<='z'&&str[i][j]>='a'))
letter++;
扩展资料:
在C语言中,C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
定义与声明:
结构体的定义如下所示,struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。