poj 1318Word Amalgamation

题目链接: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\n");
64 }
65 printf("******\n");
66 }
67 }
68 }
69 return 0;
70 }

 



posted @ 2017-07-18 20:45  木子丘  Views(191)  Comments(0Edit  收藏  举报