C语言问题 求解

从键盘上先后读入两个字符串,假定存储在字符数组s1和s2中。注意,这两个字符串最长均可达到26个字符、最短均可为0个字符。将字符串s2插入字符串s1中,生成一个新的字符串... 从键盘上先后读入两个字符串,假定存储在字符数组s1和s2中。注意,这两个字符串最长均可达到26个字符、最短均可为0个字符。将字符串s2插入字符串s1中,生成一个新的字符串s。将字符串s2插入字符串s1中,生成一个新的字符串s。如果s2比s1(假定s1的长度为L1)长,则s2的第L1个字符开始到s2结尾的所有字符按在s2中的顺序放在新生成的字符串s之后。用指针完成程序。 展开
 我来答
匿名用户
2020-05-02
展开全部

题目的意思是说s2比s1短,或长度相等,就把整个s2接到s1后面吗?

#include <stdio.h>

#include <string.h>


int main(void) {

  char s1[27], s2[27];

  char *p, *t, s[53];

  

  fgets(s1, 27, stdin);

  fgets(s2, 27, stdin);

  t = strchr(s1, '\n');

  if (t)   *t = '\0';

  t = strchr(s2, '\n');

  if (t)   *t = '\0';

  

  int l1 = strlen(s1);

  int l2 = strlen(s2);

  if (l1 < l2) {

    p = s1;

    t = s;

    while (*p) *t++ = *p++;

    p = s2 + (p - s1);

    while (*p) *t++ = *p++;

  }

  else {

    p = s1;

    t = s;

    while (*p) *t++ = *p++;

    p = s2;

    while (*p)   *t++ = *p++;

  }

  puts(s);

  return 0;

}

三天打鱼N
2020-05-02 · TA获得超过1540个赞
知道大有可为答主
回答量:2032
采纳率:74%
帮助的人:607万
展开全部
char s1[27];
char s2[27];
char s[26+27];
scanf("%s",s1);scanf("%s",s2);
char* p=s1;
char *sp=s;
st:if(*p){*sp=*p;sp++;p++;goto st;}
p=s2;
st2:if(*p){*sp=*p;sp++;p++;goto st2;}
*sp=0;
printf("%s",s);
追问
能不能写完整的程序。
追答

#include <stdio.h>

int main()

{

char s1[27];

char s2[27];

char s[26 + 27];

scanf("%s", s1);

scanf("%s", s2);

char* p = s1;

char* p2 = s2;

char* sp = s;

if (strlen(p) > strlen(p2)) {

p = s2;

p2 = s1;

}

st:if (*p) { *sp = *p; sp++; p++; goto st; }

p = p2;

st2:if (*p) { *sp = *p; sp++; p++; goto st2; }

*sp = 0;

printf("%s", s);

return 0;

}

之前用手机写的……

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

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式