C++高手求助。利用指针编写程序实现在一个字符串的任意位置上插入一个字符(插入的字符由用户从键盘输入)

如题所述

char*
insert(char*s,char
c,int
n)
{
int
len=strlen(s);
//
计算字符串的长度
if(n<=0){
//
如果n<=0就插入到第一个字符的位置
char
*p=s;
//
指针p指向字符串的首地址
p=p+len+1;
//
p指向该字符串的末尾再加一的地址
do{
*p=*(--p);
//
将指针p指向的前一个地址的值赋给当前地址
}while(p>s);//
p一直减到字符串的首地址则退出循环
(*p)=c;
//
将要插入的字符赋值给p所指向的地址,此时就是新串的首地址
}else
if
(n>=len){//
如果n>=len
就插入到末尾
*(s+len)=c;
*(s+len+1)='\0';
//
末尾加上结束符
}else{
//
插入中间
char
*p=s+len+1;
//
p指向末尾加1的位置
do{
//
跟插入头部一样的操作
*p=*(--p);
}while(p>s+n);
//
结束条件变成p指向需要插入的位置的时候
(*p)=c;
//将c赋值p指向的地址
}
return
s;
}
不过这样做不安全,扩充字符串的时候,应该重新申请一块内存,上述函数是直接在后面扩充,新扩充进来的地址有可能正在被使用,很危险这样做
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-12-21
char*
insert(char*s,char
c,int
n)
{
int
len=strlen(s);
if(n<=0){
char
*p=s;
//
这里可以改成
char
*p
=
s
+
len
+
1;
p=p+len+1;
//
p
指向了字符串结尾符'\0'的后面一个位置
do{
*p=*(--p);
//
将字符串向后复制,每次复制一个字符
}while(p>s);
//
一直复制到字符串头
(*p)=c;
//
在字符串头部放上
插入的字符
}else
if
(n>=len){
*(s+len)=c;
//
这个只是在尾部添加,不必移动字符
*(s+len+1)='\0';
}else{
char
*p=s+len+1;
//
还是指向字符串最后
do{
*p=*(--p);
}while(p>s+n);
//
这次复制n位置以后的字符
(*p)=c;
}
return
s;
}
这个函数太繁琐了,完全可以把上面三种情况合并成一个来写

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网