c语言实现识别单词并输出出现次数最多的十个单词

本文使用C语言实现了一套单词识别系统,包括存储、排序功能,能识别英文单词和标点符号,并挑出最高频率的十个单词。程序利用数组和字符串处理数据,适用于小型文本处理任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本程序用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以上文件的时候速度会明显降低,
这个程序做了两天左右,有一天的时间是在调试程序,对程序语言的应用理解不透,犯了错误都不知道怎么改。对程序语言还要加深理解,学会应用一些集成的函数,方便编程。

  

转载于:https://www.cnblogs.com/lpjdbk/p/3577080.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值