UVa10391 复合词
2015-07-28 16:50
513 查看
给出一个词典,找出所有的复合词,即恰好有两个单词连接而成的单词。输入每行都是一个由小写字母组成的单词。输入已按照字典序从小到大排序,且不超过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; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- C++ Custom Control控件向父窗体发送对应的消息
- C++中拷贝构造函数的应用详解