UVa10391 复合词

来源:互联网 发布:勇者之塔数据大全 编辑:程序博客网 时间:2024/05/16 14:17
给出一个词典,找出所有的复合词,即恰好有两个单词连接而成的单词。输入每行都是一个由小写字母组成的单词。输入已按照字典序从小到大排序,且不超过120000个单词。输出所有复合词,按照字典序从小到大排列。
//其实输入到set里面的话,它会自动按字典顺序排序。 而且本代码不用按字典排序输入单词
#include <iostream>#include <string>#include <set>#include <algorithm>using namespace std;int main(){    set<string> dict;     //定义了一个里面装载string数据类型的set 名为dict    int k = 0;    string s;    while(cin>>s && s[0] != '*'){        dict.insert(s); //往集合里面添加元素        k++;    }    /*    set<string>::iterator it0;    cout<<"All the input is: "<<endl;                     //利用iterator遍历    for(it0 = dict.begin(); it0 != dict.end(); it0++){        cout<<*it0<<endl;    }*/    cout<<"---------------output-----------------"<<endl;    string s1, s2;    set<string>::iterator it,itFind1,itFind2;    for(it = dict.begin(); it != dict.end(); ++it){        string ss = *it;        //cout<<"------------ ss = "<<ss<<"-------------"<<endl;        if(ss.length() == 1) continue;        for(int j = 1; j < ss.length(); j++){            s1 = ss.substr(0,j);            s2 = ss.substr(j,ss.length());            itFind1 = dict.find(s1);            itFind2 = dict.find(s2);            //cout<<"s1 = "<<s1<<"  and  s2 = "<<s2<<endl;            if(itFind1 != dict.end() && itFind2 != dict.end())         //如果在 dict 这个 set 中找到了所拆分的字符串的话                cout<<ss<<endl;            //cout<<endl<<"-----------Got it : "<<ss<<"--------------------"<<endl;        }    }return 0;}

0 0
原创粉丝点击