合并字符串

2025-02-24 18:55:30
推荐回答(2个)
回答1:

从两个串的首部,取一个较小的字符添加到新的合并串中,直到两个串均为空。这样每个串只需遍历一遍。代码如下:
#include
#include

char *cmbStr(const char *str1,const char *str2)
{
char *str;
long str1Num=0;
long str2Num=0;
str = (char *)malloc(strlen(str1)+strlen(str2)+1);
while(str1[str1Num] || str2[str2Num]){
#define CUT(X) (X==0?0x100:X)
str[str1Num+str2Num-1] = CUT(str1[str1Num]) }
str[str1Num+str2Num] = 0;
return str;
}
int main()
{
char *str;
str = cmbStr("abcd","acdeg");
printf("%s",str);
free(str);
return 0;
}

回答2:

我写了一个,可以实现你的功能,你运行试试
#include
#include
int main()
{
char string1[]={"acelmorx"};
char string2[]={"bdnpqstuyz"};
char *p1=string1,*p2=string2;
char string[]={" "};
char *p=string;
int n=0,i=0,j=0;
for (i;*(p1+i)!='\0';i++)
{
for (j;*(p2+j)!='\0';j++)
{
if (*(p2+j)>*(p1+i))
{
*(p+n)=*(p1+i);
n++;
break;
}
else
{
*(p+n)=*(p2+j);
n++;
}

}
}
if (*(p2+j)=='\0')
{
for (int k=i-1;*(p1+k)!='\0';k++)
{
*(p+n)=*(p1+k);
n++;
}
}
else
{
for (int l=j-1;*(p2+l)!='\0';l++)
{
*(p+n)=*(p2+l);
n++;
}
}

printf("合并后的字符串为:%s\n",p);

return 0;
}