字母重排(qsort)

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char dir[2000][7]={0},sorted[2000][7]={0}; //要求一个单词最多有6个字母,所以数组第二维应该是7,放‘\0‘,所以可以稍微放大点,防止出错
char w[10]={0}; //虽然要求6个,这里养成多写一下点的习惯
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(void)
{
int i=0;
while(1)
{
scanf("%s",dir[i]);
if(strcmp(dir[i],"******")==0)
break;
i++;
}

int len=i;
qsort(dir,len,sizeof(dir[0]),cmp_string);

for(i=0;i<len;i++)
{
strcpy(sorted[i],dir[i]);
qsort(sorted[i],strlen(sorted[i]),sizeof(char),cmp_char);

}

while(1)
{
scanf("%s",w);
qsort(w,strlen(w),sizeof(char),cmp_char);
int found=0;//:(的标志
for(i=0;i<len;i++)
{
if(strcmp(w,sorted[i])==0)
{
found=1;
printf("%s ",dir[i]);
}
}
if(!found)
printf(":)");
printf("\n");
}

return 0;
}

时间: 2024-10-06 10:21:12

字母重排(qsort)的相关文章

5.3.2 字母重排

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

Algorithm --&gt; 字母重排

字母重排 输入一个字典(用***结尾),然后再输入若干单词.没输入一个单词w,都需要在字典中找出所有可以用w的字幕重排后得到的单词,并按照字典序从小到大的顺序在一行中输出,如果不存在,输出“:(”.单词间用空格隔开,且所有输入单词都由不超过6个小写字母组成. 样例输入: tarp given score refund only trap work earn course ***** aptr asdfg 样例输出: part tarp trap :( 程序: #include <iostream

字母重排

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

POJ 3250:字母重排

AC CODE: import java.util.Scanner; public class Main { private static char[] ASCII = { 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z' }; private static String getString() { Scanner input = new

算法篇——字母重排

来源:<算法竞赛入门经典>例题5.3.2 题目:输入一个字典(用******结尾),然后再输入若干单词.每输入一个单词w,你都需要在字典中找出所有可以用w的字母重排后得到的单词,并按照字典序从小到大的顺序在一行中输出(  如果不存在,输出:(  ).输入单词之间用空格或空行隔开,且所有输入单词都由不超过6个小写字母组成.注意,字典中的单词不一定按字典序排列. 样例输入: tarp given score refund only trap work earn course pepper part

字母重排(字符串处理)

题目信息如下: 题意分析: 快速方法就是将字母先重排几次,然后在与输入的重拍后的数据进行比较,快速简单. 代码如下:(此解法详解析参考<算法竞赛入门>) #include<stdio.h> #include<string.h> #include<stdlib.h> int n; char a[2020][10],s[2020][10]; int cmp(const void *a,const void *b) { return *(char *)a-*(ch

[code]字母重排

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 #include<stdio.h> #include<stdlib.h> #include<string.h> int n; char word[ 1000][10 ],sorted[ 

字符重排

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

字母重拍

import java.util.Arrays; import java.util.Scanner; /** * 字母重排 * @author NEU-2015 * */ public class Demo { public static void main(String[] args) { Scanner input = new Scanner(System.in); String str; String[] words; String[] sort; String[] NeedFindWor