实例:词频统计
----输入一系列英文单词(单词之间用空格隔开),用“xyz”表示输入结束
----统计各单词出现的次数(单词不区分大小写),对单词按字典顺序进行排序后输出单词和词频
运行结果:
问题分析:
【算法描述】 查找算法:
【算法描述】 选择排序算法
编程实现:
#include<iostream>
#include<cstring>
using namespace std;
struct WordList{ //字典结构体
char word[20]; //存储单词本身
int freq; //单词出现次数
};
int main()
{
WordList list[1000]; //结构体数组
int N=0; //记录实际(没有重复的)的单词数
int i,j,k;
char tmp[20]; //临时存放新输入的单词
//------------输入单词--------------
cout<<"请输入一系列英语单词,以xyz表示输入结束:"<<endl;
cin>>tmp;
while(strcmp(tmp,"xyz")!=0){
for(i=0;i<N;i++){ //在当前词典中逐个查
if(strcmp(list[i].word,tmp)==0){
list[i].freq++;
break;
}
}
if(i>=N){ //没有在词典中查到,添加该词
strcpy(list[i].word,tmp);
list[i].freq=1;
N++; //实际单词数加1
}
cin>>tmp;
} //结束时,N是词典中的单词数
//------------对词典进行排序------------
for(i=0;i<N;i++){ //控制N-1次选择
k=i; //先设i为当前最小元素的下标
for(j=i+1;j<N;j++){ //与后面的单词进行比较
if(strcmp(list[j].word,list[k].word)<0){
k=j; //记下最小元素的下标
}
}
if(k!=i){ //最小的下标不是i
WordList tmp;
//交换下标是k和i的两个元素
tmp=list[i];
list[i]=list[k];
list[k]=tmp;
}
}
//------------输出结果--------------
cout<<"词频统计结果如下:"<<endl;
for(i=0;i<N;i++){
cout<<list[i].word<<"\t"<<list[i].freq<<endl;
}
return 0;
}