一、题目要求:
1.读入一个英文文本文件,英文中有字母、数字、其它字符,无汉字,文件有多行(程序要能处理至少4行文字,附件中有参考素材)。
2.编写函数实现:统计字母的出现频度,并显示结果。(大小写算同一字母)
3.编写函数实现:统计其中单词的个数,并显示结果。(单词个数以WORD统计作为参考,不一定100%相同。)
4.编写函数实现:找出最长的单词,并显示单词及其长度。
5.编写函数实现:统计出现的整数,存入一维数组,并显示结果。
(1) 比如文件中有两行:
"abc 123 W 6 www 9."
"teacher 10 student 7."
(2) 分析得到5个数:123、6、9、10、7。
(3) 定义数组int a[1000]
(4) a[0]=123,a[1]=6,a[2]=9,a[3]=10,a[4]=7。
注:可以利用下标或字符型指针处理字符串。
实现代码:
#include<stdio.h>
#include<stdlib.h>
void f1(int a[], int m)
{
int i,j,b[26];
for (i = 0; i < 26; i++)
{
b[i] = 0;
}
for (i = 0; i < m; i++)
{
if (a[i] >= 65 && a[i] <= 90)
{
b[a[i] - 65]++;
}
if (a[i] >= 97 && a[i] <= 122)
{
b[a[i] - 97]++;
}
}
for (i = 0, j = 97; i < 26; i++, j++)
{
printf("%4c的频数为%2d\n", j, b[i]);
}
}
//统计整数//
void f2(int a[],int m)
{
int i=0,j=0,b[1000];
for(i=0;i<1000;i++)
{
b[i]=0;
}
for(i=0;i<m;i++)
{
if(a[i]>=48&&a[i]<=57)
{
b[j]=b[j]*10+a[i]-48;
if(a[i+1]>57||a[i+1]<48)
{
j++;
}
}
}
printf("整数有:");
for(i=0;i<j;i++)
{
printf("%5d\n",b[i]);
}
printf("\n");
}
//单词个数//
void f3(int a[],int m)
{
int i=0,count=0;
for(i=0;i<m;i++)
{
if((a[i]>=65&&a[i]<=90)||(a[i]>=97&&a[i]<=122))
{
if(a[i+1]<65||(a[i+1]>90&&a[i+1]<97)||a[i+1]>122)
{
count++;
}
}
}
printf("单词个数为:%d\n",count);
}
//查找最长单词//
void f4(int a[],int m)
{
int i,*p,chang=0,t=0;
for(i=0;i<m;i++)
{
if((a[i]>=65&&a[i]<=90)||(a[i]>=97&&a[i]<=122))
{
t++;
}
else
{
if(t>chang)
{
p=&a[i];
chang=t;
}
t=0;
}
}
int *p1;
printf("其最长的单词为:");
for(p1=p-chang;p1<p;p1++)
{
printf("%c",*p1);
}
printf("\n其长度为:%d",chang);
}
int main()
{
void f1(int a[], int m);
void f2(int a[],int m);
void f3(int a[],int m);
void f4(int a[],int m);
FILE* fp;
printf("读入的文件内容为:\n");
fp = fopen("C:\\Users\\2.txt", "r");
int a[2000], i=0;
while (!feof(fp))
{
a[i] = fgetc(fp);
printf("%c", a[i]);
i++;
}
printf("\n");
int n;
n = i;
f1(a, n);
printf("\n");
f2(a,n);
printf("\n");
f3(a,n);
printf("\n");
f4(a,n);
printf("\n");
return 0;
}