现在的位置: 首页 > 综合 > 正文

查字典问题

2014年07月27日 ⁄ 综合 ⁄ 共 1204字 ⁄ 字号 评论关闭

输入一个字典(用*******结尾),然后再输入若于单词。每输入一个单词w,你需要在字典中找出所有可以用w的字母重排后得到的单词,并按照字典序从小到大的顺序在一行中输出(如果不存在,输出:()。输入单词之间用空格或空行隔开,且所有输入单词都不超过6个小写字母组成。注意,字典中的单词不一定按字典序排列。
  样例输入:
  tarp given score refused only trap work earn course pepper part
  *******
  resco nfudre aptr sett oresuc
  样例输出:
  score
  refund
  part tarp trap
  :(

  course

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
/*
  输入一个字典(用*******结尾),然后再输入若于单词。每输入一个单词w,你需要在字典中找出所有可以用w的字母重排后得到的单词,并按照字典序从小到大的顺序在一行中输出(如果不存在,输出:()。输入单词之间用空格或空行隔开,且所有输入单词都不超过6个小写字母组成。注意,字典中的单词不一定按字典序排列。
  样例输入:
  tarp given score refused only trap work earn course pepper part
  *******
  resco nfudre aptr sett oresuc
  样例输出:
  score
  refund
  part tarp trap
  :(
  course
*/
vector<string>	dictionary;
vector<string>	copyDic;
string sortt(string s)
{//将string排序返回
	char c[16];
	strcpy(c,s.c_str());
	sort(c,c+s.length());
	return string(c);
}
void fun()
{
	copyDic=dictionary;
	int i,j;
	for(i=0;i<copyDic.size();i++)
	{//将字典中的每个单词排序,保存到copy中
		string s=copyDic[i];
		copyDic[i]=sortt(s);
	}
}
int main()
{
	string s;
	while(cin>>s)
	{
		if(s=="*******")	break;
		dictionary.push_back(s);
	}
	fun(); 
	while(cin>>s)
	{
		int flag=1,j;
		for(j=0;j<copyDic.size();j++)
		{
			if(sortt(s)==copyDic[j])
			{
				flag=0;
				cout<<dictionary[j]<<" ";
			}
		}
		if(flag)
			cout<<":(";
		cout<<endl;
	}
	return 0;
}

抱歉!评论已关闭.