关于c语言编程,编写程序 实现涵数char*insert(c har*s1,chae*s2)的功能是

Python010

关于c语言编程,编写程序 实现涵数char*insert(c har*s1,chae*s2)的功能是,第1张

//很辛苦写的,应该符合你的要求,在Visual C++ 6.0 中完美运行通过

//使用的字符函数介绍:

// strlen(计算字符串长度), strcat(接字符串连接到另一字符串末尾

// strncat(将字符串前n个字符连接到另一字符串末尾)strchr(在字符串中查找一个字符)

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

char *insert(char *s1, char *s2)

{

int len1 = strlen(s1)

int len2 = strlen(s2)

char *s3 = (char *)malloc((len1 + len2 + 1)*sizeof(char))//+1是为了多申请一个字节来保存字符串末尾的'\0'

memset(s3, '\0', len1 + len2 +1) //将字符串设为全是'\0'

char *p = strchr(s1, *s2) //查找s2首字符是否在s1中?

if (p != NULL) //在s1中

{

int pos = p - s1 //计算s2开头字符在s1中的位置

strncat(s3, s1, pos) //s1前pos个字符接到s3末尾

strcat(s3, s2) //把s2接到s3末尾

strcat(s3, s1 + pos) //把s1中剩下的部分接到s3末尾

}

else //不在s2中

{

strcat(s3, s1) //把s1接到s3末尾

strcat(s3, s2) //把s2接到s3末尾

}

return s3

}

void main()

{

char *s1 = "abcddefgh"

char *s2 = "d45"

char *s3 = insert(s1, s2)

printf("s1: %s\n", s1)

printf("s2: %s\n", s2)

printf("s3: %s\n\n", s3)

}

子函数中的a是有生存时间的,当子函数结束时,那么a的生命周期也结束了,所以chaeck中的a是带入不到main中去的

再说了,子函数的参数,是实参的影子,不在一个内存空间中,改变了子函数的形参,是无法影响实参的

其实判断是否是1,不需要用子函数。把while循环放到main中即可