键盘依次接受两个英语。
例如
输入:
abcd
cdef
输出:abcdef
输入:
abcdcd
cdcdef
输出:abcdcdef
输入:
abcd
ef
输出:abcdef
#include<stdio.h>
#include<stdlib.h>
int strlenthg(char *p);
char *func(char *a, char *b);
int main()
{
char ch1[100]={0};
char ch2[100]={0};
fgets(ch1, sizeof(ch1), stdin);
fgets(ch2, sizeof(ch2), stdin);
char *s=NULL;
s=func(ch1, ch2);
printf("%s \n",s);
// free(s);
}
char *func(char *a, char *b)
{
int len1=strlenthg(a);
int len2=strlenthg(b);
char ch1[len1],ch2[len2];
int nn=0;
while(*a!='\0')
{
ch1[nn]=*a;
a++;
nn++;
}
nn=0;
while(*b!='\0')
{
ch2[nn]=*b;
b++;
nn++;
}
int n=0;
int i,j;
int flag=0,flag_s=0;
/********************
拿第二个英语的首位去从第一个英语的末尾开始往前比较。
发现相同的,然后进入if以及flag,保存位置n,进行比较首位后边掠过的几位。
如果后几位不相同,清除flag
继续往前移动,如果有相同的继续比较
*******************/
while(1)
{
if(ch1[len1-1-n]==ch2[0])
{
for(i=0;i<=n;i++)
{
if(ch2[i]==ch1[len1-1-n+i])
{}
else
{break;}
if(n!=0)
{
if(i==n)
{
flag_s=n;
flag=1;
}
}
else
{flag_s=n;flag=1;}
}
}
if(n==(len1>len2?len2:len1))
break;
n++;
}
/***************
* 去掉重复的部分,拼接成一个新的字符串
* ************/
if(flag==1)
{
char *str;
str=malloc(len1+len2-flag_s-1);
for(int i=0;i<len1;i++)
{
*str=ch1[i];
str++;
}
for(i=len1;i<(len1+len2-flag_s-1);i++)
{
*str=ch2[i-len1+flag_s+1];
str++;
}
return (str-len1-len2+flag_s+1);
}
/****************
* 拼接成一个字符串
* **************/
else
{
char *str1;
str1=malloc(len1+len2);
for(int i=0;i<len1;i++)
{
*str1=ch1[i];
str1++;
}
for(int i=len1;i<(len1+len2);i++)
{
*str1=ch2[i-len1];
str1++;
}
return (str1-len1-len2);
}
}
int strlenthg(char *p)
{
int i = 0;
while(*p!='\0')
{
i=i+1;
p++;
}
return i-1;
}