题意:输出输入中出现过得两个单词合成的另一个单词,即S中p=str1+str2&&str1属于S&&str2属于S。
思路:遍历每个单词,将每个单词的每个位置作为间断点将一个单词为分两个单词,观察是否都出现过。
#include<iostream>
#include<string.h>
#include<map>
using namespace std;
char a[120010][100],b[100],c[100];
int main()
{
map<string,int>mp;
int n=0,i,j,k;
while(gets(a[n])!=NULL)//遇空字符串结束输入
{
mp[a[n]]=1;
n++;
}
for(i=0;i<n;i++)
{
int l=strlen(a[i]);
for(j=0;j<l-1;j++)
{
for(k=0;k<j;k++)
b[k]=a[i][k];
b[j]='\0';
for(k=j;k<l;k++)
c[k-j]=a[i][k];
c[l-j]='\0';
if(mp[b]==1&&mp[c]==1)
{
cout<<a[i]<<endl;
break;
}
}
}
}