输入一个字典(用*结尾),然后再输入若干单词。每输入一个单词W,你都需要在字典中找出所有可以用w的字母重排后得到的单词,如果不存在,输出:(。输入的单词之间用空格或空行隔开,且所有输入单词都由不超过6个小写字母组成。注意,字典中的单词不一定按字典序排列。 样例输入: tarp given score refund only trap work earn course pepper part
resco nfudre aptr 样例输出: score refund part tarp trap :(
解决:在读入字典的时候把字母排序,但要保留原单词,因为最后还要按字典输出; 接下来的单词输入后立即排序,比较,每遇到一个满足条件的单词就立刻输出。 主程序前写好一个字符比较的函数和一个字符串比较的函数,还用到了stdlib中的qsort
#include <iostream>
#include <vector>
#include <cstdlib>
#include <cstring>
using namespace std;
#define MAX 10010
char dict[MAX][MAX]= {0};
char result[MAX][MAX]= {0};
char word[MAX] = {0};
int cmp_char(const void * a, const void * b)
{
char * m = (char *)a;
char * n = (char *)b;
return * m - * n;
}
int cmp_string(const void * a, const void * b)
{
char * m = (char *)a;
char * n = (char *)b;
return strcmp(m, n);
}
int main()
{
int dict_len = 0;
// int word_len = 0;
for (; ; )
{
cin >> dict[dict_len];
strcpy(result[dict_len], dict[dict_len]);
if (dict[dict_len][0] == '*')
break;
dict_len++;
}
// cout << n << endl;
for (int i = 0; i < dict_len; ++i)
{
qsort(dict[i], strlen(dict[i]), sizeof(char), cmp_char);
}
for (; ; )
{
cin >> word;
qsort(word, strlen(word), sizeof(char), cmp_char);
// word_len++;
for (int i = 0; i < dict_len; ++i)
{
if (cmp_string(word, dict[i]) == 0)
{
cout << result[i] << endl;
}
else
cout << ":(" << endl;
}
}
for (int i = 0; dict[i][0] != '*'; ++i)
{
for (int j = 0; dict[i][j] != '\0'; ++j)
{
cout << dict[i][j];
}
cout << " ";
}
return 0;
}