essential c++ ch3

3.1ios

#include <map>
#include <set>
#include <string>
#include <vector>
#include <iostream>
#include <fstream>
#include <iterator>

using namespace std;

void initialize_exclusion_set(set<string> &);//初始化排除的序列
void process_file(map<string, int>&, const set<string> &, ifstream&);
void user_query(const map<string, int>&);
void display_word_count(const map<string, int>&, ofstream&);

int main()
{
    ifstream ifile("input.txt");
    ofstream ofile("output.txt");
    if (!ifile || !ofile)
    {
        cerr << "unable to open files!\n";
        return -1;
    }

    set<string> exclude_set;
    initialize_exclusion_set(exclude_set);

    map<string, int> word_count;
    process_file(word_count, exclude_set, ifile);
    user_query(word_count);
    display_word_count(word_count, ofile);
}

void initialize_exclusion_set(set<string> &exs)
{
    static string _excluded_words[5] = {"the", "and", "but", "are", "then"};
    exs.insert(_excluded_words, _excluded_words + 5);
}
void process_file(map<string, int>&word_count, const set<string> &exclude_set, ifstream &ifile)
{
    string word;
    while (ifile >> word)
    {
        if (exclude_set.count(word))//判斷是否須要排除
            continue;
        word_count[word]++;
    }
}
void user_query(const map<string, int>&word_map)
{
    string search_word;
    cout << "Please enter a word to search: q to quit:";
    cin >> search_word;
    while(search_word.size() && search_word !="q")
    {
        map<string, int>::const_iterator it;
        if ((it = word_map.find(search_word)) != word_map.end())
        {
            cout << "Found  " << it->first   //key
                   <<" occurs " << it->second  //value
                   <<" times.\n";
        }
        else
            cout << search_word << " was not found in text.\n";
        cout << "\nAnother search?(q to quit) ";
        cin >> search_word;
    }
}

void display_word_count(const map<string, int>& word_map, ofstream& os)
{
    map<string, int>::const_iterator iter = word_map.begin(), end_it = word_map.end();
    while(iter  != end_it)
    {
        os << iter->first << " ( "
            << iter->second << " ) " << endl;
        ++iter;
    }
    os << endl;
}

3.2ui

#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

class LessThan
{
public:
    bool operator()(const string& s1, const string& s2)
    {
        return s1.size() < s2.size();
    }
};

template<typename elemType>
void display_vector(const vector<elemType> &vec, ostream &os = cout, int len = 8)
{
    vector<elemType>::const_iterator iter = vec.begin(), end_it  = vec.end();
    int elem_cnt = 1;
    while (iter != end_it)
    {
        os << *iter++
            <<(!(elem_cnt++ % len) ? '\n' : ' ');
        os << endl;
    }
}

int main()
{
    ifstream infile("input.txt");
    ofstream outfile("output.txt");
    vector<string> word;
    string str;
    if( ! infile)
    {
            cerr << "unable to open the file.\n";
            return -1;
    }
    while (infile >> str)
    {
        word.push_back(str);
    }
//     vector<string>::iterator it = word.begin(), end_it = word.end();
//     for ( ; it != end_it; it++)
//     {
//         cout << *it << endl;
//     }
    sort(word.begin(), word.end(), LessThan());//這個sort能夠直接這麼調用,開始想錯了,還打算用嵌套循環實現,這個直接就是function object
    display_vector(word, outfile);
}
相關文章
相關標籤/搜索