本题要求实现一个函数,可将两个字符串交叉连接。连接方法如下:假设有两个字符串str1和str2,str2的第i个字符插入到原str1的第i个字符后,如果str2比str1(假定str1的长度为L1)长,则str2的第L1个字符开始到str2结尾的所有字符按在str2中的顺序放在新生成的str1后。
函数接口定义:
void strXcat(char *dst,char *src1,char *src2);
其中 dst
、 src1
、 src2
都是用户传入的参数,分别用于存放主调函数中新生成字符串、源字符串1和源字符串2。
裁判测试程序样例:
#include <stdio.h>
#include <string.h>
#define NLEN 128
void strXcat(char *dst,char *src1,char *src2);
int main(void)
{
char srcStr1[NLEN],srcStr2[NLEN];
char dstStr[2*NLEN];
gets(srcStr1);
gets(srcStr2);
strXcat(dstStr,srcStr1,srcStr2);
if(strlen(dstStr)==0)
printf("result:NULL\n");
else
printf("result:%s\n",dstStr);
return 0;
}
/* 请在这里填写答案 */
输入样例1:
abcd
efgh
输出样例1:
result:aebfcgdh
输入样例2:
abcde
fghi
输出样例2:
result:afbgchdie
输入样例3:
abc
defgh
输出样例3:
result:adbecfgh
参考代码一(数组)
void strXcat(char *dst,char *src1,char *src2)
{
int i=0,j=0,k=0;
while(src1[i]!='\0'&&src2[j]!='\0')
{
dst[k++]=src1[i++];
dst[k++]=src2[j++];
}
while(src1[i]!='\0')
dst[k++]=src1[i++];
while(src2[j]!='\0')
dst[k++]=src2[j++];
dst[k]='\0';//一定要最后加上这个换行符,因为前面都是一到换行符就停止循环,新的字符串最后没有换行符就会导致除了输入的两行字符串连接后,后面还会有乱码
}
参考代码二(指针)
void strXcat(char *dst,char *src1,char *src2)
{
while(*src1!='\0'&&*src2!='\0')
{
*dst++=*src1++;
*dst++=*src2++;
}
while(*src1!='\0')
*dst++=*src1++;
while(*src2!='\0')
*dst++=*src2++;
*dst='\0';
}
参考代码三(运用字符串长度判断)
void strXcat(char *dst,char *src1,char *src2)
{
int i=0,j=0;
int a=strlen(src1);
int b=strlen(src2);
while(i<a&&i<b)
{
dst[j]=src1[i];
j++;
dst[j]=src2[i];
j++;
i++;
}
while(i<a)
{
dst[j]=src1[i];
i++;j++;
}
while(i<b)
{
dst[j]=src2[i];
i++;j++;
}
dst[j]='\0';
}
标签:src2,交叉,++,dst,样例,PTA,char,src1,字符串
From: https://blog.csdn.net/2401_87796961/article/details/144819517