当前位置:新注册送38元体验金 > 新注册送38元体验金编程 > 【TOJ 2327】Compound Words(组合词)(set以及substr的

【TOJ 2327】Compound Words(组合词)(set以及substr的

文章作者:新注册送38元体验金编程 上传时间:2019-08-22

【TOJ 2327】Compound Words(组合词)(set以及substr的运用),toj2327

描述

You are to find all the two-word compound words in a dictionary. A two-word compound word is a word in the dictionary that is the concatenation of exactly two other words in the dictionary.

输入

Standard input consists of a number of lowercase words, one per line, in alphabetical order. There will be no more than 120,000 words.

输出

Your output should contain all the compound words, one per line, in alphabetical order.

样例输入

a
alien
born
less
lien
never
nevertheless
new
newborn
the
zebra
**样例输出
**

alien
newborn

题解

其实这道题就是让我们求出一个由两个单词组成的单词,并按照字典序输出。

解决该题的关键在于substr函数和set函数的组合运用,暴力过~

关于substr函数

substr有两种用法:

假设:string s = "0123456789" ;  //下标从0开始

① string a = s.substr(5)               //表示从下标为5的位置开始截取,一直到结尾。

                                                    // a = "56789"

② string b = s.substr(5,3)            //表示从下标为5的位置开始截取,截取三位。

                                                    // b = "567"

 

#include<string>
#include<set>
#include<iostream>
using namespace std;
int main()
{
    string word,a,b;
    set<string>se;
    set<string>::iterator it; 
    while(cin>>word)
        se.insert(word);                  //将所有单词存入set 

    for(it=se.begin();it!=se.end();it  )  //每一个单词依次遍历 
    {
        for(int i=1;i<(*it).size();i  )
        {    //把一个单词拆成两部分 
            a=(*it).substr(0,i);          //遍历这个单词除最后一个字母以外的所有字母 
            b=(*it).substr(i);            //遍历这个单词除第一个字母以外的所有字母
            if(se.count(a)&&se.count(b))  //如果集合中有这两个字符组合就输出 
            {
                cout<<(*it)<<endl;
                break;
            }
        }
    }
    return 0;
}

 

 

2327】Compound Words(组合词)(set以及substr的运用),toj2327 描述 You are to find all the two-word compound words in a dictionary. A two-word compound word...

本文由新注册送38元体验金发布于新注册送38元体验金编程,转载请注明出处:【TOJ 2327】Compound Words(组合词)(set以及substr的

关键词: