文章搜素—最终版

顺序有些乱,是我没来的及更新。写完初始版本后感觉速度实在是慢,就把开始版本中复杂的数据交换

temp=p1->num;
 p1->num=p->num;
p->num=temp;
 s=p1->word;
 p1->word=p->word;
p->word=s;

 

去掉了,新的代码是

//删除了复杂的数据交换
 #include<fstream>
#include<iostream>
#include<string>
using namespace std;
typedef struct words{
 string word;
 int num;
 struct words *next;
}words,*Linklist;
 int InitList_L(Linklist &L)
{
    L=new words;
    L->next=NULL;
    return 1;
}
 void Paixu(Linklist L)
 { cout.width(10); 
 cout<<"单词"<<"   "<<"次数"<<endl;
     string s;
     int temp;
     Linklist p,p1;
     
     for(int i=0;i<10;i++){
         p1=L->next;
         p=p1->next;
         while(p)
         {
     if(p->num>p1->num)
     {   
         p1=p;
 
     }
     p=p->next;}
         cout.width(10);
         cout<<p1->word<<"   "<<p1->num<<endl;
         p1->num=0;
         
     }
 }
int main()
{  
     cout<<"请输入文件的名称:"<<endl;
     char filename[30];
     cin>>filename;
    Linklist L;
   InitList_L(L);
    string w;
    ifstream fin;
    fin.open(filename,ios::in);
    if(!fin)
    {cout<<"打开错误!"<<endl;
    return 0;}
    Linklist p,s,q;
       while(fin>>w)
       { int a=0;
           q=L;
           p=L->next;
           while(p){
        if(p->word==w)
        {p->num+=1;
        a++;}
         p=p->next;
         q=q->next;}
           if(a==0)
           {       
  s=new words;
  s->word=w;
  s->num=1;
  q->next=s;
  s->next=NULL;}
       }

  Paixu(L);
 return 0;
    
}

即,采用冒泡法,找出前十名,无需复杂数据交换,另外还增加了按文件名读文件以及读取错误处理等功能

posted @ 2014-03-02 14:40  曹玉松  阅读(264)  评论(1编辑  收藏  举报