因为文件都相同,且恰好分成两部分,所以我先将所有字符串按长度排序,最短串和最长串组成的一定是源文件!如果有多个最短串和最长串,就要排列组合去试了。
在编写qsort的比较函数时遇到了问题,百度后解决了,最主要就是*(char**)这里,容易写错,如果只写char*,那是指向字符的指针,char**才是指向指针的指针,指向的是一个地址,字符串的首地址。
qsor函数中的第三个参数要写每个待排序元素的大小,我看网上有两个版本,可以写sizeof(char*),也可以写sizeof(str【0】),试过了都可以运行。
代码有点长,就是穷举地去试的,没想到好办法。。。
#include#include #include #include #include using namespace std; const int SIZE = 256; char* str[300]; int cases,Len,dex; bool flag,vis[SIZE]; int cmp(const void* a,const void* b) { return strlen(*(char**)a)>strlen(*(char**)b); } void judge(char tar[]) { for (int i=1;i i;j--) { if (strlen(str[i])+strlen(str[j]) i;j--) { if (strlen(str[i])+strlen(str[j]) >cases; getchar();getchar(); while(cases--) { dex=0; str[dex]= new char [SIZE]; while (cin>>str[dex++]) { str[dex]=new char[SIZE]; } qsort(str,dex,sizeof(str[0]),cmp); int lenshort=strlen(str[1]); int lenlong=strlen(str[dex-1]); Len=lenshort+lenlong; for (int i=1;i<=dex/2;i++) { if (flag) break; if (strlen(str[i])==lenshort) { for (int j=dex-1;j>=1;j--) { if (strlen(str[j])==lenlong) { solve(i,j); if (flag) break; } else break; } } else{ cout<<"NO"<