Uva10391 Compound Words
题意:
给出许多单词,然后问里面哪些是复合词,复合词就是这个单词正好是由给出的数据中的其它两个单词拼接而成
大一刚学紫书不久,这道题放在第5章,使用STL容器可快速做出。
两重循环,第一重是遍历每个单词。第二重是,分割每个单词成两个单词,判断分成的两个单词是否存在,如果存在则为复合词,输出它。
#include<iostream>
#include<vector>
#include<set>
#include<string>
using namespace std;
string word;
vector<string> words;//存储所有单词
set<string> dict;//存储所有单词,不重复,有count找单词
int main(){
while(cin>>word){
words.push_back(word);
dict.insert(word);
}
for(int i=0;i<words.size();i++){//循环,判断每个单词是否为复合词
word=words[i];
for(int j=1;j<word.size();j++){
//分割,分割线从第一个字母后循环到最后一个字母前
string left=word.substr(0,j);//分割线前的单词
string right=word.substr(j);//分割线后的单词
if(dict.count(left)&&dict.count(right)){//如果left与right都存在
cout<<word<<endl;//输出该复合词
break;
}
}
}
return 0;
}