题目链接:http://poj.org/problem?id=1318
/*题意:在字母乱序的单词里面找到字母相同的字典里面的单词*/
/*此题的主要思路是要将字符排序,然后找对应,如果相同,那么就将此按字典序将字母一样的单词输出,
本人觉得此题的关键的问题是要将字符排序,那么就会出现二维字符数组的排序问题,
二维字符数组排序有很多种方法(因为二维字符数组不能直接复制,所以不能直接用sort()排序),
1.可以用到结构体
2.指针
3.可以将二维的字符数组转化成一维的字符数组(以下代码就是用的这种方法)
代码优化:将待确定的字符直接用一维的字符数组,然后排序,直接与第一部分的单词相比较
*/
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 using namespace std; 6 char str1[100][7],str2[100][7]; 7 char tra1[100][7],tra2[100][7]; 8 char temp[6]; 9 10 int cmp(const void *a,const void *b) 11 { 12 return(strcmp((char*)a,(char*)b)); 13 } 14 15 int main(){ 16 int len1=0,len2=0; //计算str1与str2的长度 17 for(int i=0;i<100;i++){ 18 cin>>str1[i]; 19 if(str1[i][0]=='X'){ 20 break; 21 } 22 len1++; 23 } 24 qsort(str1,len1,sizeof(str1[0]),cmp); 25 for(int i=0;i<len1;i++){ 26 strcpy(tra1[i],str1[i]); //复制 27 } 28 for(int i=0;i<100;i++){ 29 cin>>str2[i]; 30 strcpy(tra2[i],str2[i]); //复制 31 if(str2[i][0]=='X'){ 32 break; 33 } 34 len2++; 35 } 36 //将字符按照asc码的形式进行排序 37 38 for(int i=0;i<len1;i++){ 39 int len3=strlen(str1[i]); 40 strcpy(temp,tra1[i]); 41 sort(temp,temp+len3); 42 strcpy(tra1[i],temp); 43 // cout<<tra1[i]<<endl; 44 } 45 for(int i=0;i<len2;i++){ 46 int len4=strlen(str2[i]); 47 strcpy(temp,tra2[i]); 48 sort(temp,temp+len4); 49 strcpy(tra2[i],temp); 50 51 } 52 //比较字符串是否相同 53 int num; 54 for(int i=0;i<len2;i++){ 55 num=0; 56 for(int j=0;j<len1;j++){ 57 if(strcmp(tra2[i],tra1[j])==0){ 58 cout<<str1[j]<<endl; 59 num++; 60 } 61 if(j==len1-1){ 62 if(num==0){ 63 printf("NOT A VALID WORD "); 64 } 65 printf("****** "); 66 } 67 } 68 } 69 return 0; 70 }