沁洋 2020-03-03 21:33 采纳率: 0%
浏览 337

C语言 结构体 最后结果总是输出错误,不知道为啥。

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

    我写的代码如下:(是使用vc++编译的,最后结果有一些与实际答案不同)

#include
#include
#include
#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 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 {
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条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-23 18:55
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试