map练习-Lexicon词典-anagram游戏

来源:互联网 发布:广州蓝盾怎么样 知乎 编辑:程序博客网 时间:2024/06/06 17:19
static string character_sort(string str){    for(int i = 0; i < str.size()-1; i++){        int j = i;        int key = str[i+1];        while(str[j] > key && j >= 0){            str[j+1] = str[j];            j--;        }        str[j+1] = key;    }    return str;}void complie_map(map<string, vector<string>>& anagrams){    Lexicon english("EnglishWords.dat");    for(auto word : english){        string key = character_sort(word);        if( anagrams.find(key) != anagrams.end() )            anagrams[key].push_back(word);        else{            vector<string> v;            v.push_back(word);            anagrams.insert( pair<string, vector<string>> (key, v) );        }    }}void test(){    map<string, vector<string>> anagrams;    complie_map(anagrams);    string str;    cout<<"input your string:";    cin>>str;    cout<<str<<"'s anagrams are:"<<endl;    string key = character_sort(str);      //注意!!!key值并不一定是English word     map<string, vector<string>>::iterator it = anagrams.find(key);    if( it != anagrams.end() ){        for(int i = 0; i < it->second.size(); i++)            cout<<it->second[i]<<endl;    }    cout<<"the size of the EnglishWords map is:"<<anagrams.size()<<endl;}int main() {    while(true){        string str;        test();        cout<<"Continue?";        cin>>str;        if(str == "no")            break;    }    return 0;}

0 0
原创粉丝点击