本程序用C语言实现单词的识别,包含一些C++语言的一些用法,主要的函数有单词识别函数、存储函数、冒泡排序挑出此处最高的十个单词,本程序可以识别英文单词和标点符号,
该程序的数据类型大多用的数组和字符串类型,
源程序:
#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<iostream>
using namespace std;
string s[100];
int b[100];
long f;
//***排序查询频率最高的十个单词***
void paixu(int b[])
{
int i=f-1;
int y;
string x;
cout<<f<<endl;
while(i>f-10)
{
int l=0;
for(int j=0;j<i;j++)
if(b[j]>b[j+1])
{ y=b[j];
b[j]=b[j+1];
b[j+1]=y;
x=s[j];
s[j]=s[j+1];
s[j+1]=x;
l=j;
}
i=l;
}
cout<<"出现次数最高的十个单词:"<<endl;
for(i=1;i<=10;i++)
{
cout<<s[f-i]<<" "<<b[f-i]+1<<endl;
}
}
//**********存储单词,比较是否重复*********
int af(char e[])
{
int i,k=0;
string l;
string p="\0";
//s[0]="a";
char *v;
for(i=0;(l=s[i])!=p;i++)
{
if(strcmp(e,s[i].c_str())==0)
{ b[i]+=1;
k=1;
return 1;
}
}
if(k==0)
{
if(s[i]==p)
{ v=e;
s[i]=v;
}
else
{ v=e;
s[i+1]=v;
}
f++;
return 0;
}
}
//*******识别单词******************
void shibie1(char d[])
{
char h,m,a;
int j=0,y=0;
char c[30];
for(int i=0;(m=d[i])!='\0';i++)
{
a=m;
if(a>='a'&&a<='z'||a>='A'&&a<='Z')
{
c[j]=a;
j++;
}
else if(a>='0'&&a<='9')
{
c[j]=a;
j++;
}
else
{
y=af(c);
puts(c);
for(j=0;(h=c[j])!='\0';j++)
c[j]='\0';
j=0;
c[j]=a;
y=af(c);
puts(c);
c[0]='\0';
}
if(d[i+1]=='\0')
{
y=af(c);
puts(c);
}
}
}
//****主函数,输入文件*****
int main()
{
FILE *fp;
char ch,filename[10];
int i=0,p=0;
char d[30];
f=0;
printf("请输入所用文件名:");
scanf("%s",filename);
if((fp=fopen(filename,"r"))==NULL)
{
printf("无法打开此文件\n");
exit(0);
}
for(i=0;i<30;i++)
d[i]='\0';
while(!feof(fp))
{
ch=fgetc(fp);
if(ch!='\n'&&ch!=' ')
{ d[p]=ch;
p++;
}
if((ch=='\n'||ch==' ')&&d[0]!='\0')
{
shibie1(d);
p=0;
for(i=0;i<30;i++)
d[i]='\0';
}
}
if(d[0]!='\0')
shibie1(d);
paixu(b);
fclose(fp);
return 0;
}
编程体会:本程序只用了c的基本数据类型,整个过程看起来挺乱的,识别的单词用字符串存放,定义的小了容易超出空间,不能处理中文,在处理300k以上文件的时候速度会明显降低,
这个程序做了两天左右,有一天的时间是在调试程序,对程序语言的应用理解不透,犯了错误都不知道怎么改。对程序语言还要加深理解,学会应用一些集成的函数,方便编程。