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;
}





转载于:https://www.cnblogs.com/xunalove/p/6809235.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值