#include<iostream> #include<fstream> #include<string> #include <algorithm> using namespace std; #define MAXSIZE 10000 #define KEYSIZE 10 #define OK 0 #define ERROR -1 typedef string KeyType; typedef struct { KeyType key; int count; int index; }ElemType; typedef struct { ElemType *R; int length; }SSTable; KeyType key[KEYSIZE] = {"little","prince","sheep","flowers","believe","stars","one","my","he","the"}; int InitSSTable(SSTable &ST) { /*-----------代码开始--------------*/ /*-----------代码结束--------------*/ return OK; } int InsertSSTable(SSTable &ST,KeyType key,int index) { ST.length++; /*-----------代码开始--------------*/ /*-----------代码结束--------------*/ ST.R[ST.length].index = index; return OK; } string SplitWord(string str) { int begin, end; for(begin=0;begin<str.length();begin++) { if(str[begin]>='a' && str[begin]<='z') break; } for(end=str.length()-1;end>=0;end--) { if(str[end]>='a' && str[end]<='z') break; } if(begin<=end) return str.substr(begin,end-begin+1); else return ""; } char op(char c) { if(c>='A' && c<='Z') c = c+32; return c; } int ProcessIn(KeyType *test,int &len,ifstream &in) { int i = 0; string temp; while(!in.eof()) { in>>temp; transform(temp.begin(), temp.end(), temp.begin(), op); test[i] = SplitWord(temp); i++; } len = i; return OK; } int SearchBin(SSTable ST,KeyType key) { /*-----------代码开始--------------*/ /*-----------代码结束--------------*/ return 0; } void Show(SSTable ST) { for(int i=1;i<=KEYSIZE;i++) cout<<ST.R[i].key<<":"<<ST.R[i].count<<endl; } bool CmpKey(ElemType x,ElemType y) { return x.key < y.key; } bool CmpIndex(ElemType x,ElemType y) { return x.index < y.index; } int main() { ifstream in("testData/小王子.txt"); SSTable ST; KeyType test[MAXSIZE]; int len; ProcessIn(test,len,in); InitSSTable(ST); for(int i=0;i<KEYSIZE;i++) InsertSSTable(ST,key[i],i); sort(ST.R+1,ST.R+1+KEYSIZE,CmpKey); //统计关键词列表中单词的词频 /*-----------代码开始--------------*/ /*-----------代码结束--------------*/ sort(ST.R+1,ST.R+1+KEYSIZE,CmpIndex); Show(ST); in.close(); return OK; }