本程序用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=" "; //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])!=' ';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])!=' ';j++) c[j]=' '; j=0; c[j]=a; y=af(c); puts(c); c[0]=' '; } if(d[i+1]==' ') { 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("无法打开此文件 "); exit(0); } for(i=0;i<30;i++) d[i]=' '; while(!feof(fp)) { ch=fgetc(fp); if(ch!=' '&&ch!=' ') { d[p]=ch; p++; } if((ch==' '||ch==' ')&&d[0]!=' ') { shibie1(d); p=0; for(i=0;i<30;i++) d[i]=' '; } } if(d[0]!=' ') shibie1(d); paixu(b); fclose(fp); return 0; }
编程体会:本程序只用了c的基本数据类型,整个过程看起来挺乱的,识别的单词用字符串存放,定义的小了容易超出空间,不能处理中文,在处理300k以上文件的时候速度会明显降低,
这个程序做了两天左右,有一天的时间是在调试程序,对程序语言的应用理解不透,犯了错误都不知道怎么改。对程序语言还要加深理解,学会应用一些集成的函数,方便编程。