c语⾔实现识别单词并输出出现次数最多的⼗个单词
本程序⽤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
{c 字符串数组怎么定义
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以上⽂件的时候速度会明显降低,这个程序做了两天左右,有⼀天的时间是在调试程序,对程序语⾔的应⽤理解不透,犯了错误都不知道怎么改。对程序语⾔还要加深理解,学会应⽤⼀些集成的函数,⽅便编程。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。