第十五章 字串(一)
阿新 • • 發佈:2018-12-30
第十五章是《程式設計珠璣》的最後一章,本章由易到難圍繞字串處理主要分三個部分:1,單詞。2,短語。3,文字。在這三個問題中涉及到的技術有C++中的標準模板庫,雜湊表,新介紹的一種資料結構“字尾陣列”。先從第一個部分“單詞”入手。
“我們的第一個問題是為文件中包含的單詞生成一個列表”。這個問題用C++標準模板庫中的set和string可以很容易解決。
- // Sorted list of words(between white space) in file
- #include <iostream>
-
#include <string>
- #include <set>
- usingnamespace std;
- int main()
- {
- string str;
- set<string> S;
- set<string>::iterator i;
- //while((cin>>str) != EOF)
- while(cin>>str)
- S.insert(str);
- for(i=S.begin(); i!=S.end(); i++)
-
cout<<*i<<endl;
- return 0;
- }
“接下來的問題是對文件中每個單詞的出現次數進行統計”。這個問題利用map容器即可方便地解決。
- // Sorted list of words and counts in file
- #include <iostream>
- #include <string>
- #include <map>
-
usingnamespace std;
- int main()
- {
- //int count=0;
- string str;
- map<string, int> M;
- map<string, int>::iterator i;
- //while((cin>>str) != EOF)
- /*
- while(cin>>str)
- M.insert(str, ++count);
- for(i=S.begin(); i!=S.end(); i++)
- cout<<(*i)->first<<"\t"<<(*i)->second<<endl;
- */
- /*
- while(cin>>str)
- M.insert(make_pair(str, ++count));
- */
- while(cin>>str)
- M[str]++;
- for(i=M.begin();i!=M.end();++i)
- cout<<i->first<<"\t"<<i->second<<endl;
- return 0;
- }
程式達人們為了追求效率,減少處理的時間,對這個程式進行改進,定製了散列表,將字串通過雜湊演算法分佈到散列表中,這樣就很有效地減少了程式執行過程中“插入”和“輸出”的時間,據書中的記載是這個演算法處理有29131個