C语言结构体,可以看看这道题我哪里写错了吗,最后结果输出错误。

题目要求:
1.读入一个英文文本文件,英文中有字母、数字、其它字符,无汉字,文件有多行。
2.编写函数实现:统计字母的出现频度,并显示结果。
3.编写函数实现:统计其中单词的个数,并显示结果。(单词个数以WORD统计为准)
找出最长的单词,并显示单词及其长度。
返回单词的统计结果。
4.统计出现的整数,存入一维数组,并显示结果。
注:学会利用字符型指针处理字符串。

下面是我写的代码,但是我输出的结果总有一些错误。(可以帮我检查一下吗?谢谢啦。这个我是用vc++运行的)

#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#define N 1000
void main()
{
int zi_mu(char *sp);
int statistics(char b[80][80],char a[N]);
void zheng_shu(char sp);
int i=0,j=0;
char b[80][80],a[80]; //一个单词相当于一个一维数组。
printf(“文章全文是:\n”);
FILE
fp;//------1.读入一个英文文本文件,
char c;
if((fp=fopen(“test.txt”,“r”))==NULL)
{
printf(“无法打开此文件\n”);
exit(0);
}
while((c=fgetc(fp))!=EOF)
{
a[i]=c;
i++;
}
a[i]=’\0’;
int n=strlen(a);
printf("%s",a);
zi_mu(a);
statistics(b,a);
zheng_shu(a);
}

int zi_mu(char *sp)//----------2.统计字母的出现频度,
{
int i,a[26];
for(i=0;i<26;i++)
a[i]=0;
while((*sp)!=’\0’)
{
if(((*sp)>=‘a’&&(*sp)<=‘z’)||((*sp)>=‘A’&&(*sp)<=‘Z’))
{
i=(*sp)-‘a’;
a[i]++;
}
sp++;
}
printf("\n\n单词出现的次数:\n");
for(i=0;i<26;i++)
printf(" %c:%d ",‘a’+i,a[i]);
return 0;
}

int statistics(char b[80][80],char a[N]) //—3.统计其中单词的个数,并显示结果找出最长的单词.
{
int i,j,high,key=0,word=0,key1=0,max1=0,maxi=0;
char *p;
for(i=0;a[i]!=’\0’;i++)
{
if(a[i]’ ')
key=0;
else if(key
0&&(a[i]>=‘a’&&a[i]<=‘z’||a[i]>=‘A’&&a[i]<=‘Z’))
{
key=1;
word++;
}
}
printf("\n一共有%d个单词.\n",word);
i=0;
j=0;
p=a;
while((*p)!=’\0’)
{
if((*p>=‘a’&&*p<=‘z’)||(*p>=‘A’&&*p<=‘Z’))
{
b[i][j]=*p;
j++;
}
else
{
b[i][j]=’\0’;
j=0;
i++;
}
p++;
}
b[i][j]=’\0’;
high=i+1;
for(i=0;i<high;i++)
{
max1=0;j=0;
while((b[i][j]>=‘a’&&b[i][j]<=‘z’)||(b[i][j]>=‘A’&&b[i][j]<=‘Z’))
{
max1++;
j++;

		}
		if(max1>key1)
		key1=max1;		
		if(j==key1)
			maxi=i; 
 }
    b[maxi][key1]='\0';
	printf("最长单词是:");
	for(i=0;i<key1;i++)
		printf("%c",b[maxi][i]);
	printf("  该单词长度为%d。",key1);
	return 0;

}

void zheng_shu(char *sp)//---------4.统计出现的整数,存入一维数组,并显示结果。
{
int a[20]={0},i=0,n=0;
while((*sp)!=’\0’)
{
if((*sp)>=‘0’&&(*sp)<=‘9’)//若是数字字符
{
a[i]=a[i]*10+(*sp-‘0’);//sp-‘0’ 数字字符转换成数字。
if((sp)!=’\0’&&(!((sp+1)>=‘0’&&
(sp+1)<=‘9’)))//当前是数字字符下一个不是,准备处理下一个
i++;
}
sp++;
}
n=i;
printf("\n\n此文共有%d个数字: “,n);
for(i=0;i<n;i++)//------------------输出整数
{
printf(” %d “,a[i]);
}
printf(”\n");
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值