C语言合并两个字符串问题

题目要求,设计fun函数。fun功能合并两个字符串:如字符串a:123字符串b:abcde。执行后为:1a2b3cde#include<stdio.h>#include<... 题目要求,设计fun函数。fun功能合并两个字符串:
如字符串 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);
}

但是执行不出来呀。。。。愚昧了
展开
 我来答
w9xhcn
推荐于2016-11-11 · TA获得超过828个赞
知道小有建树答主
回答量:156
采纳率:0%
帮助的人:185万
展开全部

注释都给你加好了, 自己看看吧。

#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;

}

slzhangshiju

2011-09-01
知道答主
回答量:19
采纳率:0%
帮助的人:2.9万
展开全部
必须出不来
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
123songmingzhu
2011-08-31 · TA获得超过309个赞
知道小有建树答主
回答量:436
采纳率:0%
帮助的人:261万
展开全部
在定义一个数组交替存入两个数组的值,这是我的办法。
追问
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';
}
这样呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友daf46de
2011-08-31 · TA获得超过325个赞
知道小有建树答主
回答量:209
采纳率:0%
帮助的人:218万
展开全部
当然热行不出来了,你的第二次strcpy会覆盖第一次的结果的
追问
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];

}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式