首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

小菜啊这个C语言程序该如何写

2012-04-01 
小菜求助啊,这个C语言程序该怎么写编程实现函数char *insert(char *s1,char *s2)的功能是:在字符串s1中插

小菜求助啊,这个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);
}
不能防止字符串越界。也没考虑存储空间不够。
[解决办法]
刚学习,比较简单

C/C++ code
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);
}
[解决办法]
测试下看看
C/C++ code
#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;

}

热点排行