C++,编写一个函数,实现字符串s1中指定位置a处插入字符串s2
要求用指针,如s1为abcdefgh,在2处插入apple,则变为abapplecdefgh编写一个函数insert(char*s1,char*s2,unsigneda)...
要求用指针,如s1为abcdefgh,在2处插入apple,则变为abapplecdefgh
编写一个函数insert(char*s1,char*s2,unsigned a) 必须用C++
我写的是
#include<iostream>
using namespace std;
int main()
{char *insert(char*,char*,unsigned);
char*s1="abcdefgh";
char*s2="apple";
int n;
cin>>n;
cout<<insert(s1,s2,n)<<'\n';
return 0;
}
char*insert(char*s1,char*s2,unsigned a)
{int length(char*);
char ss[30];
for(int i=0;i<a;i++)
ss[i]=*(s1+i);
for(;i<i+length(s2);i++)
ss[i]=*(s2+i-a);//初始化等于插入的字符串
for(;i<length(s1)+length(s2);i++)
ss[i]=*(s1+i-length(s2))//初始化等于被分割的后面的字符串
return ss;}
int length(char*a)
{int n=0,i=0;
while(*(a+i)!=0)
{n++;a++;}
return n;}
不能用string变量,谢谢了,string我也会 展开
编写一个函数insert(char*s1,char*s2,unsigned a) 必须用C++
我写的是
#include<iostream>
using namespace std;
int main()
{char *insert(char*,char*,unsigned);
char*s1="abcdefgh";
char*s2="apple";
int n;
cin>>n;
cout<<insert(s1,s2,n)<<'\n';
return 0;
}
char*insert(char*s1,char*s2,unsigned a)
{int length(char*);
char ss[30];
for(int i=0;i<a;i++)
ss[i]=*(s1+i);
for(;i<i+length(s2);i++)
ss[i]=*(s2+i-a);//初始化等于插入的字符串
for(;i<length(s1)+length(s2);i++)
ss[i]=*(s1+i-length(s2))//初始化等于被分割的后面的字符串
return ss;}
int length(char*a)
{int n=0,i=0;
while(*(a+i)!=0)
{n++;a++;}
return n;}
不能用string变量,谢谢了,string我也会 展开
展开全部
#include <string>
#include <stdio.h>
bool insert( char*s1,char*s2,unsigned a)
{
char *p1 = s1,*p2 = s2;
char temp[128]={};
int _size = strlen(s1)-a;
memcpy( temp,p1+a,_size );
memcpy( p1+a,s2,strlen(s2));
memcpy( p1+a+strlen(s2),temp,_size );
*(p1+a+strlen(s2)+_size+1) = '\0';
return true;
}
int main(int argc, char* argv[])
{
int a=0;
char test[128]="abcefafasdfadfads";
printf("%s\n",test);
insert( test,"PRESS",4);
printf("%s\n",test);
return 0;
}
代码不够安全和简洁,仅供参考。
追问
不能用cstring库啊,只能用指针,老师规定的,谢谢了,能不能再看一下,还有我的哪里错了
我是学C++的不能用C啊,
追答
// insert srcStr to srcStr at insertPos
// @srcStr sroce string
// @desStr des string
// @insertPos the pos for insert srcStr
// @ buffer the buffer for store the result string
// @ bufSize the buffersize
int InsertStrToStr( const char *srcStr,const char *desStr,int insertPos,char *buffer,int bufSize)
{
int srcPos=0,desPos = 0,bufPos=0;
while( *(desStr+desPos) != '\0' )
{
if( desPos == insertPos )
{
while( *(srcStr+srcPos) !='\0')
{
*(buffer+bufPos++)=*(srcStr+srcPos);
srcPos++;
if( bufPos >=bufSize )
{
return -1;
}
}
}
*(buffer+bufPos++)=*(desStr+desPos);
desPos++;
if( bufPos >=bufSize )
{
return -1;
}
}
return 0;
}
这里给你整理了一个安全性略好一点的,按照你的意思只用指针的接口,你可以在参考下。
展开全部
void insert(char* strSrc, const char* strFrom, unsigned pos, char** strRt = NULL)
{
char* buf = NULL;
unsigned len = strlen(strSrc) + strlen(strFrom) + 1;
if(pos > strlen(strSrc))
{
*strRt = NULL;
return;
}
if(strRt)
{
*strRt = new char[len];
memset(*strRt, 0, len);
memcpy(*strRt, strSrc, strlen(strSrc));
buf = *strRt;
}
else
{
buf = strSrc;
}
unsigned part2Len = strlen(buf) - pos;
char* strPart2 = new char[part2Len];
memcpy(buf + pos, strFrom, strlen(strFrom));
memcpy(buf + pos + strlen(strFrom), strPart2, part2Len);
delete strPart2;
}
int main()
{
char s1[50] = "abcdefgh";
const char* s2 = "apple";
//可以这样
char* rt = NULL;
insert(s1, s2, 2, &rt);
cout << rt << endl;
delete rt;
//or这样
insert(s1, s2, 2);
cout << s1 << endl;
return 0;
}
追问
不能用cstring库啊,只能用指针,老师规定的,谢谢了,能不能再看一下,还有我的哪里错了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你想说啥?
更多追问追答
追问
就是字符串中插入字符串
abcdefg在位置2处插入AAA
就是abAAAcdefg
追答
我给你写一个吧
#include <cstdio>
#include <cstring>
void insert(char*s1,char*s2,unsigned a)
{
//假定s1空间足够 不然没法搞
char s3[100];
strcpy(s3,s1+a);
s1[a]=0;
strcat(s1,s2);
strcat(s1,s3);
}
int main(void)
{
char s1[100] ="abcdefgh";
char s2[]="apple";
insert(s1,s2,1);
puts(s1);
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询