1008: 算法提高 P1003

1008: 算法提高 P1003

时间限制: 1 Sec  内存限制: 128 MB
提交: 7  解决: 3
[提交][状态][讨论版]

题目描述

作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过,有些狡猾的犯罪嫌疑人会 改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行是关键词列表,第二行是待检查的句子。程序 的输出为在该句子中所找到的经过顺序调整的关键词。(单词全部为小写,单词之间以一个空格分隔,每一行的单词个数不限)

输入

guns mines missiles
aameric ssell snug dan iimsssle ot sit neeemi

输出

guns missiles

样例输入

guns mines missilesaameric ssell snug dan iimsssle ot sit neeemi 

样例输出

guns missiles

提示

来源

解题思路:
运用getline输入整行数据,根据stl中的stringstream的用法可以取每一个字符串,首先保存每一个字符串的原始数据,然后对字符串进行排序,保存排序后的字符串,对排序后的字符串进行比较是否相同,相同则保存原来数据于新的数组
#include<iostream>
#include<string>
#include<map>
#include<string.h>
#include<math.h>
#include<memory.h>
#include<algorithm> 
#include<sstream>
using namespace std;
string f(string m)
{
	char ch[10001];
	string temp="";
	int i;
	for(i=0;i<m.size();i++)
	ch[i]=m[i];
	sort(ch,ch+m.size());
	for(i=0;i<m.size();i++)
	temp+=ch[i];
	return temp;
}
int main()
{
	string s1,s2;
	while(getline(cin,s1)&&getline(cin,s2))//整行输入
	{ 
	   stringstream q1(s1),q2(s2);
	   string s,m;
	   string r[10001],a[10001],b[10001],t[10001];
	   int k1=0,i,k=0,j,w=0;
	   while(q1>>s&&q1!='\0')
	   	  r[k1++]=s;//存放原始数据 
	   for(i=0;i<k1;i++)
	   {
	     //cout<<r[i]<<endl;
	     m=r[i];
	     a[i]=f(m);
	     //cout<<f(m)<<endl;
	   } 
	   while(q2>>s&&q2!='\0') 
	   {
	   	 m=f(s);
	   	 b[k++]=m;
	   	 //cout<<m<<endl;
	   } 
	   for(i=0;i<k1;i++)
	   {
	   	 for(j=0;j<k;j++)
	   	 {
	   	 	if(a[i]==b[j])
	   	 	t[w++]=r[i];
			}
	   }
	   for(i=0;i<w-1;i++)
	   cout<<t[i]<<" ";
	   cout<<t[w-1]<<endl; 
    }
   return 0;
}





posted @ 2017-02-23 20:50  X_na  阅读(175)  评论(0编辑  收藏  举报