输入一个字典(用******结尾),然后输入若干单词。每输入一个单词w,
都需要在字典中找出所有可以用w的字母重拍后得到的单词,并按照字典序
从小到大的顺序在一行中输出(如果不存在,输出:( 哭脸)。输入单词之间
用空格或空行隔开,且所有输入单词都由不超过6个小写字母组成。注意字典
中的单词不一定按照字典顺序排列。
样例输入:
trap given score refund only trap work earn course pepper part
******
resco nfudre aprt sett orseuc
样例输出:
score
refund
part tarp trap
:(
course
思路:在读入字典时就将字典中的单词,按字母的顺序排列,,,再把输入的单词字母
都需要在字典中找出所有可以用w的字母重拍后得到的单词,并按照字典序
从小到大的顺序在一行中输出(如果不存在,输出:( 哭脸)。输入单词之间
用空格或空行隔开,且所有输入单词都由不超过6个小写字母组成。注意字典
中的单词不一定按照字典顺序排列。
样例输入:
trap given score refund only trap work earn course pepper part
******
resco nfudre aprt sett orseuc
样例输出:
score
refund
part tarp trap
:(
course
思路:在读入字典时就将字典中的单词,按字母的顺序排列,,,再把输入的单词字母
进行顺序的排列,如果这两个排列相等,那么久可以输出它在字典中的原单词了。
#include<stdio.h>
#include<string>
#include<iostream>
using namespace std;
int n;
char word[2000][10],sorted[2000][10];//两千个单词,每个十字符以内
//字符比较函数 用的stdlib中的排序函数qsort ,,要注意它的用法,构造各式。
int cmp_char(const void *_a, const void *_b)
{
char *a = (char*)_a;
char *b = (char*)_b;
return *a - *b;
}
//字符串比较函数
int cmp_string(const void *_a, const void *_b)
{
char *a = (char*)_a;
char *b = (char*)_b;
return strcmp(a,b);
}
int main()
{
int n = 0;
for (;;)
{
cin >> word[n]; //读入单词
if (word[n][0] == '*')
break; //遇到标志就终止循环
n++;
}
qsort(word, n, sizeof(word[0]), cmp_string);//所有单词排列
for (int i = 0; i < n; i++)
{
strcpy(sorted[i], word[i]);//将word中的内容复制一份到sort中
qsort(sorted[i], strlen(sorted[i]), sizeof(char), cmp_char);//给每个单词进行排序
}
//上面是读入字典 接下来是输入的单词
char s[10];
while (scanf("%s", &s) == 1)//是否有输入的字串
{
int find = 0;
qsort(s, strlen(s), sizeof(char), cmp_char);//将输入的单词字母进行排序
for (int i = 0; i < n; i++)//将输入字串的排序与字典中所有的元素比较
{
if (strcmp(s, sorted[i])==0)
{
find = 1;
cout << word[i]<<" ";
}
}
if (!find)//没找到的话就输出哭脸:(
cout << ":(";
cout << endl;
}
return 0;
}