破题啊 写完发现理解错题意了 子目录下会有跟之前重名的
把输入的字符串存下来 排下序 然后依次找跟上面有没有重的
1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cstdlib> 5 #include<algorithm> 6 #include<map> 7 #include<string> 8 #include<vector> 9 using namespace std; 10 vector<string>q[510]; 11 char sx[510][82][11]; 12 struct node 13 { 14 char c[82]; 15 }s[510]; 16 int o[510]; 17 bool cmp(node a,node b) 18 { 19 return strcmp(a.c,b.c)<0; 20 } 21 int main() 22 { 23 int n,i,j,k; 24 char c[11]; 25 scanf("%d%*c",&n); 26 for(i = 1; i <= n ; i++) 27 { 28 gets(s[i].c); 29 k = strlen(s[i].c); 30 for(j = 0 ; j < k ; j++) 31 if(s[i].c[j]==92) 32 s[i].c[j] = 1; 33 } 34 sort(s+1,s+n+1,cmp); 35 for(i = 1; i <= n ; i++) 36 { 37 int g = 0; 38 k = strlen(s[i].c); 39 for(j = 0 ; j < k ;j++) 40 { 41 if(s[i].c[j]!=1) 42 c[g++] = s[i].c[j]; 43 else 44 { 45 c[g] = '\0'; 46 o[i]++; 47 strcpy(sx[i][o[i]],c); 48 g = 0; 49 } 50 } 51 if(g) 52 { 53 c[g] = '\0'; 54 o[i]++; 55 strcpy(sx[i][o[i]],c); 56 } 57 } 58 k = 0; 59 for(i = 1; i <= o[1] ; i++) 60 { 61 for(j = 1 ; j <= k ; j++) 62 printf(" "); 63 printf("%s\n",sx[1][i]); 64 k++; 65 } 66 for(i = 2; i <= n ; i++) 67 { 68 int f = 1;k=0; 69 for(j = 1 ; j <= o[i]; j++) 70 { 71 if(!f||o[i-1]<j) 72 { 73 for(int g = 1 ; g <= k ; g++) 74 printf(" "); 75 printf("%s\n",sx[i][j]); 76 } 77 else 78 if(strcmp(sx[i][j],sx[i-1][j])!=0) 79 { 80 for(int g = 1 ; g <= k ; g++) 81 printf(" "); 82 printf("%s\n",sx[i][j]); 83 f = 0 ; 84 } 85 k++; 86 } 87 } 88 return 0; 89 }