小菜求助啊,这个C语言程序该怎么写
编程实现函数char *insert(char *s1,char *s2)的功能是:在字符串s1中插入一个新字符串s2,插入s2串的第一个字符必须被原字符串s1所包含,返回插入后的字符串。例如:有字 符串abcdefgh,插入d45后输出abcd45defgh。如果s2串的第一个字母没有被原字符串s1所包含,在s1尾部插入。Main函数中输入两个字符串,调用函数insert,输出新的字符串。
[解决办法]
这函数原型...
char* insert(char* s1, char* s2)
{
char* p = strchr(s1, *s2);
if (p == NULL)
return s1;
char temp[BIG_ENOUGH];
strcpy(temp, p);
strcpy(p, s2);
strcat(p, temp);
}
不能防止字符串越界。也没考虑存储空间不够。
[解决办法]
刚学习,比较简单
void insert(char *s1,char *s2){ int m,n,i; char *p1=s1; char *p2=s1; char *p3=s2; m=strlen(s1); n=strlen(s2); i=0; while(*p1!=*p3) { p1++; if(p1==s1+m) { while(*p3) { *(p1+i)=*p3; i++; p3++; } printf("%s",s1); return; } } for(p2=s1+m-1;p2>=p1;p2--) *(p2+n)=*p2; while(*p3) { *p1=*p3; p1++; p3++; } printf("%s",s1);}
[解决办法]
#include "stdio.h"
#include "string.h"
void insert(char *s1,char *s2)
{
int i=0;
char temp[128];
char *s3;
s3 = temp;
while(s1[i]!='\0')
{
if(s1[i]==s2[0])
break;
i++;
}
memcpy(s3,s1,i);
memcpy(&s3[i],s2,strlen(s2));
memcpy(&s3[strlen(s2)+i],&s1[i+1],strlen(s1)-i);
s3[strlen(s2)+strlen(s1)]='\0';
printf("%s",s3);
}
void main()
{
char s1[]="abcdefgh";
char s2[]="d45";
insert(s1,s2);
}
[解决办法]
测试下看看
#include<stdio.h>#include<string.h>char *inserts(char *s1,char *s2);int main(){ char *a; char *b; char *c; a = (char*)malloc(150); b = (char*)malloc(50); c = (char*)malloc(200); scanf("%s %s",a,b); c = inserts(a,b); printf("a = %s,b = %s\nc = %s\n",a,b,c); free(a); free(b); free(c);}char *inserts(char *s1,char *s2){ int i,j; char *dst; char *tmp; dst = (char*)malloc(strlen(s1)+strlen(s2)); for(i = 0; i< strlen(s1);i++) { if(s1[i] == s2[0]) { tmp = s1+i; strncpy(dst,s1,i); strcat(dst,s2); strcat(dst,tmp); return dst; } } strcpy(dst,s1); strcat(dst,s2); return dst;}
[解决办法]
这个才没浪费空间
char *insert(char *s1,char *s2)
{
int s1_size=strlen(s1);
int s2_size=strlen(s2);
char *s3=(char*)malloc((s1_size+s2_size)*sizeof(char));
int i,j,k,f;
for(i=0;s1[i]!=s2[0]&&s1[i]!='\0';i++)
s3[i]=s1[i];
f=i; //把i几下来
for(j=i,k=0;k<s2_size;++k,++j)
s3[j]=s2[k];
while(f<=s1_size){
s3[j]=s1[f];
++f;
++j;
}
return s3;
}