33,008
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/**只用修改这里**************************/
char a[]="aaacbb";
char b[]="aaabbc";
char c[]="bbaccc";
char d[]="bbbbbb";
/**************************只用修改这里**/
struct node{
char *s;
int len;
};
struct save{
struct node *a;
int cnt;
int size;
};
void init_save(struct save *sv,int size){
sv->size=size;
sv->cnt=0;
sv->a=(struct node*)malloc(sizeof(struct node)*size);
}
void del_save(struct save *sv){
free(sv->a);
}
void add_save(struct save *sv,char *s){
if(sv->cnt==sv->size){
printf("error: space is full\n");return;
}
sv->a[sv->cnt].len=strlen(s);
sv->a[sv->cnt].s=s;
sv->cnt++;
}
int compar(const void *a,const void *b){
char **aa,**bb;
int cmp=0;
aa=(char**)a;
bb=(char**)b;
cmp=strcmp(*aa,*bb);
if(cmp>0) return 1;
if(cmp==0) return 0;
return -1;
}
void fun(struct save *sv){
int i,j,n;
int e,d;
char **p;
char *t,*tt,*tt2;
n=0;
for(i=0;i<sv->cnt;i++) n+=sv->a[i].len;
n+=(sv->cnt-1);
t=(char*)malloc(sizeof(char)*(n+1));
tt=(char*)malloc(sizeof(char)*(sv->a[0].len+1));
tt2=(char*)malloc(sizeof(char)*(sv->a[0].len+1));
p=(char**)malloc(sizeof(char*)*(n+1));
for(i=0,j=0;i<(sv->cnt-1);i++){
strcpy(t+j,sv->a[i].s);
j+=sv->a[i].len;
t[j]=' ';
j++;
}
strcpy(t+j,sv->a[i].s);
memset(tt,0,sizeof(char)*(sv->a[0].len+1));
memset(tt2,0,sizeof(char)*(sv->a[0].len+1));
memset(p,0,sizeof(char*)*n);
for(i=0;i<n;i++) p[i]=&t[i];
qsort(p,n,sizeof(char*),compar);
e=-1;
for(i=0;i<n-1;i++){
d=0;
memset(tt,0,sizeof(char)*(sv->a[0].len+1));
for(j=0;*(*(p+i)+j)==*(*(p+i+1)+j);j++){
tt[j]=*(*(p+i)+j);d++;
}
if(d==0||d<=e) continue;
for(j=0;j<sv->cnt;j++){
if(strstr(sv->a[j].s,tt)==0) break;
}
if(j!=sv->cnt) continue;
e=d;
strcpy(tt2,tt);
}
printf("fun( ");
for(i=0;i<sv->cnt-1;i++) printf("%s, ",sv->a[i].s);
printf("%s ) = %s\n",sv->a[i].s,tt2);
free(t);free(p);free(tt);free(tt2);
}
int main(){
struct save sv;
init_save(&sv,10);
add_save(&sv,a);
add_save(&sv,b);
add_save(&sv,c);
add_save(&sv,d);
fun(&sv);
del_save(&sv);return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/**只用修改这里**************************/
char a[]="aaaaa";
char b[]="aaaaa";
char c[]="aaaaa";
char d[]="aaaaa";
/**************************只用修改这里**/
struct node{
char *s;
int len;
};
struct save{
struct node *a;
int cnt;
int size;
};
void init_save(struct save *sv,int size){
sv->size=size;
sv->cnt=0;
sv->a=(struct node*)malloc(sizeof(struct node)*size);
}
void del_save(struct save *sv){
free(sv->a);
}
void add_save(struct save *sv,char *s){
if(sv->cnt==sv->size){
printf("error: space is full\n");return;
}
sv->a[sv->cnt].len=strlen(s);
sv->a[sv->cnt].s=s;
sv->cnt++;
}
int compar(const void *a,const void *b){
char **aa,**bb;
int cmp=0;
aa=(char**)a;
bb=(char**)b;
cmp=strcmp(*aa,*bb);
if(cmp>0) return 1;
if(cmp==0) return 0;
return -1;
}
void fun(struct save *sv){
int i,j,n;
int e,d;
char **p;
char *t,*tt,*tt2;
n=0;
for(i=0;i<sv->cnt;i++) n+=sv->a[i].len;
n+=(sv->cnt-1);
t=(char*)malloc(sizeof(char)*(n+1));
tt=(char*)malloc(sizeof(char)*(sv->a[0].len+1));
tt2=(char*)malloc(sizeof(char)*(sv->a[0].len+1));
p=(char**)malloc(sizeof(char*)*(n+1));
for(i=0,j=0;i<(sv->cnt-1);i++){
strcpy(t+j,sv->a[i].s);
j+=sv->a[i].len;
t[j]=' ';
j++;
}
strcpy(t+j,sv->a[i].s);
memset(tt,0,sizeof(char)*(sv->a[0].len+1));
memset(tt2,0,sizeof(char)*(sv->a[0].len+1));
memset(p,0,sizeof(char*)*n);
for(i=0;i<n;i++) p[i]=&t[i];
qsort(p,n,sizeof(char*),compar);
e=-1;
for(i=0;i<n-1;i++){
d=0;
memset(tt,0,sizeof(char)*(sv->a[0].len+1));
for(j=0;*(*(p+i)+j)==*(*(p+i+1)+j)&&*(*(p+i)+j)!=' ';j++){
tt[j]=*(*(p+i)+j);d++;
}
if(d==0||d<=e) continue;
for(j=0;j<sv->cnt;j++){
if(strstr(sv->a[j].s,tt)==0) break;
}
if(j!=sv->cnt) continue;
e=d;
strcpy(tt2,tt);
}
printf("fun( ");
for(i=0;i<sv->cnt-1;i++) printf("%s, ",sv->a[i].s);
printf("%s ) = %s\n",sv->a[i].s,tt2);
free(t);free(p);free(tt);free(tt2);
}
int main(){
struct save sv;
init_save(&sv,10);
add_save(&sv,a);
add_save(&sv,b);
add_save(&sv,c);
add_save(&sv,d);
fun(&sv);
del_save(&sv);return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/**只用修改这里**************************/
char a[]="aaacbb";
char b[]="aaabbc";
char c[]="bbaccc";
char d[]="bbbbbb";
/**************************只用修改这里**/
struct node{
char *s;
int len;
};
struct save{
struct node *a;
int cnt;
int size;
};
void init_save(struct save *sv,int size){
sv->size=size;
sv->cnt=0;
sv->a=(struct node*)malloc(sizeof(struct node)*size);
}
void del_save(struct save *sv){
free(sv->a);
}
void add_save(struct save *sv,char *s){
if(sv->cnt==sv->size){
printf("error: space is full\n");return;
}
sv->a[sv->cnt].len=strlen(s);
sv->a[sv->cnt].s=s;
sv->cnt++;
}
int compar(const void *a,const void *b){
char **aa,**bb;
int cmp=0;
aa=(char**)a;
bb=(char**)b;
cmp=strcmp(*aa,*bb);
if(cmp>0) return 1;
if(cmp==0) return 0;
return -1;
}
void fun(struct save *sv){
int i,j,na,nb,nc,n;
int e,d;
char **p;
char *t,*tt,*tt2;
n=0;
for(i=0;i<sv->cnt;i++) n+=sv->a[i].len;
na=strlen(a);nb=strlen(b);nc=strlen(c);
n+=(sv->cnt-1);
t=(char*)malloc(sizeof(char)*(n+1));
tt=(char*)malloc(sizeof(char)*(sv->a[0].len+1));
tt2=(char*)malloc(sizeof(char)*(sv->a[0].len+1));
p=(char**)malloc(sizeof(char*)*(n+1));
for(i=0,j=0;i<(sv->cnt-1);i++){
strcpy(t+j,sv->a[i].s);
j+=sv->a[i].len;
t[j]=' ';
j++;
}
strcpy(t+j,sv->a[i].s);
memset(tt,0,sizeof(char)*(sv->a[0].len+1));
memset(tt2,0,sizeof(char)*(sv->a[0].len+1));
memset(p,0,sizeof(char*)*n);
for(i=0;i<n;i++) p[i]=&t[i];
qsort(p,n,sizeof(char*),compar);
e=-1;
for(i=0;i<n-1;i++){
d=0;
memset(tt,0,sizeof(char)*(sv->a[0].len+1));
for(j=0;*(*(p+i)+j)==*(*(p+i+1)+j);j++){
tt[j]=*(*(p+i)+j);d++;
}
if(d==0) continue;
for(j=0;j<sv->cnt;j++){
if(strstr(sv->a[j].s,tt)==0) break;
}
if(j!=sv->cnt) continue;
if(e==-1||d>e){
e=d;
strcpy(tt2,tt);
}
}
printf("fun( ");
for(i=0;i<sv->cnt-1;i++) printf("%s, ",sv->a[i].s);
printf("%s ) = %s\n",sv->a[i].s,tt2);
free(t);free(p);free(tt);free(tt2);
}
int main(){
struct save sv;
init_save(&sv,10);
add_save(&sv,a);
add_save(&sv,b);
add_save(&sv,c);
add_save(&sv,d);
fun(&sv);
del_save(&sv);return 0;
}
fun( aaacbb, aaabbc, bbaccc, bbbbbb ) = bb
Press any key to continue
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/**只用修改这里**************************/
char a[]="aaacbb";
char b[]="aaabbc";
char c[]="bbaccc";
/**************************只用修改这里**/
int compar(const void *a,const void *b){
char **aa,**bb;
int cmp=0;
aa=(char**)a;
bb=(char**)b;
cmp=strcmp(*aa,*bb);
if(cmp>0) return 1;
if(cmp==0) return 0;
return -1;
}
void fun2(char *a,char *b){
int i,j,na,nb,n;
int c,d;
char **p;
char *t,*tt,*tt2;
na=strlen(a);nb=strlen(b);
n=na+nb+1;
t=(char*)malloc(sizeof(char)*(n+1));
tt=(char*)malloc(sizeof(char)*(na+1));
tt2=(char*)malloc(sizeof(char)*(na+1));
p=(char**)malloc(sizeof(char*)*(n+1));
strcpy(t,a);t[na]=' ';strcpy(t+na+1,b);
memset(tt,0,sizeof(char)*(na+1));
memset(tt2,0,sizeof(char)*(na+1));
memset(p,0,sizeof(char*)*n);
for(i=0;i<n;i++) p[i]=&t[i];
qsort(p,n,sizeof(char*),compar);
c=-1;
for(i=0;i<n-1;i++){
d=0;
memset(tt,0,sizeof(char)*(na+1));
for(j=0;*(*(p+i)+j)==*(*(p+i+1)+j);j++){
tt[j]=*(*(p+i)+j);d++;
}
if(d==0) continue;
if(strstr(a,tt)==0) continue;
if(strstr(b,tt)==0) continue;
if(c==-1||d>c){
c=d;
strcpy(tt2,tt);
}
}
printf("fun2( %s, %s ) = %s\n",a,b,tt2);
free(t);free(p);free(tt);free(tt2);
}
void fun3(char *a,char *b,char *c){
int i,j,na,nb,nc,n;
int e,d;
char **p;
char *t,*tt,*tt2;
na=strlen(a);nb=strlen(b);nc=strlen(c);
n=na+nb+nc+2;
t=(char*)malloc(sizeof(char)*(n+1));
tt=(char*)malloc(sizeof(char)*(na+1));
tt2=(char*)malloc(sizeof(char)*(na+1));
p=(char**)malloc(sizeof(char*)*(n+1));
strcpy(t,a);t[na]=' ';
strcpy(t+na+1,b);t[na+nb+1]=' ';
strcpy(t+na+nb+2,c);
memset(tt,0,sizeof(char)*(na+1));
memset(tt2,0,sizeof(char)*(na+1));
memset(p,0,sizeof(char*)*n);
for(i=0;i<n;i++) p[i]=&t[i];
qsort(p,n,sizeof(char*),compar);
e=-1;
for(i=0;i<n-1;i++){
d=0;
memset(tt,0,sizeof(char)*(na+1));
for(j=0;*(*(p+i)+j)==*(*(p+i+1)+j);j++){
tt[j]=*(*(p+i)+j);d++;
}
if(d==0) continue;
if(strstr(a,tt)==0) continue;
if(strstr(b,tt)==0) continue;
if(strstr(c,tt)==0) continue;
if(e==-1||d>e){
e=d;
strcpy(tt2,tt);
}
}
printf("fun3( %s, %s, %s ) = %s\n",a,b,c,tt2);
free(t);free(p);free(tt);free(tt2);
}
int main(){
fun2(a,b);
fun3(a,b,c);
return 0;
}
fun2( aaacbb, aaabbc ) = aaa
fun3( aaacbb, aaabbc, bbaccc ) = bb
Press any key to continue