C语言合并两个字符串问题
如字符串 a:123 字符串 b:abcde。执行后为:1a2b3cde
#include <stdio.h>
#include <string.h>
void fun(char * a, char * b, char * c)
{
char s1[81]; //存储用
char s2[81]; //存储用
int i,j,n=0,m=1;
for(i=0;a[i]!='\0';i++)
{
s1[n]=a[i]; //s1存储角标为0、2、4....的元素
n++;
n++;
}
s1[n]='\0';
for(j=0;b[i]!='\0';j++)
{
s2[m]=b[j]; //s2存储角标为1、3、4....的元素
m++;
m++;
}
s2[m]='\0';
strcpy(c,s1);
strcpy(c,s2); //连接2字符栓
}
main ()
{
char a[81];
char b[81];
char c[81];
printf("Input a:\n");
gets(a);
printf("Input b:\n");
gets(b);
fun(a,b,c);
puts(c);
}
但是执行不出来呀。。。。愚昧了 展开
注释都给你加好了, 自己看看吧。
#include <stdio.h>
#include <string.h>
void fun(char * a, char * b, char * c)
{
int i=0,j=0,k=0; //i确定c的字符位置,j确定b,k确定a
if(strlen(a)<strlen(b)) //strcmp确定a和b谁长,题目中a比b短。
{
while(b[j]!='\0') //判断b是不是到结尾
{
if(a[k]!='\0'){ //判断a是不是到结尾
c[i]=a[k]; //
c[i+1]=b[j];//
i+=2; //
j++; //
k++; //交叉插入c当中,c的步长为2就是i+=2,a,b的变量自增
}else {
c[i]=b[j]; //当a插入完后,b由于比a长, b把剩下的值赋给c
i++;
j++;
}
}
c[i]='\0'; //c的末尾加入结束符
}
}
int main ()
{
char a[81];
char b[81];
char c[81];
printf("Input a:\n");
gets(a);
printf("Input b:\n");
gets(b);
fun(a,b,c);
printf("\n");
puts(c);
return 0;
}
void fun(char * a, char * b, char * c)
{
int i,j,n=0,m=1;
for(i=0;a[i]!='\0';i++)
{
c[n]=a[i]; //s1存储角标为0、2、4....的元素
n++;
n++;
}
for(j=0;b[i]!='\0';j++)
{
c[m]=b[j]; //s2存储角标为1、3、4....的元素
m++;
m++;
}
c[m]='\0';
}
这样呢?
void fun(char * a, char * b, char * c)
{
int i,j,n=0,m=1;
for(i=0;a[i]!='\0';i++)
{
c[n]=a[i]; //s1存储角标为0、2、4....的元素
n++;
n++;
}
for(j=0;b[i]!='\0';j++)
{
c[m]=b[j]; //s2存储角标为1、3、4....的元素
m++;
m++;
}
c[m]='\0';
}
这样呢?
你这样还是有问题的,问题在于你这种方式,只适于两个字符串的长度相等的情况 。
如果两个字符串的长度不等就不行了,
我的想法是
void fun(char * a, char * b, char * c)
{
int i,k;
k=0;
for(i=0;(b[i]!='\0') || (a[i]!='\0');i++)
{
if(a[i]=='\0')
a[i+1]='\0';
if(b[i]]=='\0')
b[i+1]='\0';
if(a[i]!='\0')
c[k++]=a[i];
if(b[i]]!='\0')
c[k++]=b[i];
}
}