标题:用指针做:字符串的插入
取消只看楼主
上海妹妹
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2004-11-7
 问题点数:0 回复次数:11 
用指针做:字符串的插入

用指针做:字符串的插入,作出的答案不对呀,

char insert(char *p1,char *p2,int t)

{int i;

for(i=0;*p1!='\0';i++,p1++)

if(i>=t-1&&*p2!='\0')

*p1=*p2++; /*这句有问题,我不知道如何将*p2赋给*p1的同时将p1指向原来的内容逐个后移*/

}

main()

{char a[50],b[50];

gets(a);

gets(b);

insert(a,b,3); /*从第三个数开始插入 */

puts(a);}

情大家帮帮忙!!!!

[此贴子已经被作者于2004-11-11 20:45:26编辑过]

搜索更多相关主题的帖子: 指针 字符 char insert int 
2004-11-11 20:41
上海妹妹
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2004-11-7
得分:0 

不对呀,这样的话,p2指针不是不动了?

我是要实现字符串的插入,

比如输入 aaaaa

fff

则输出:aafffaaa

而我的答案是:aafffa

[此贴子已经被作者于2004-11-11 21:04:08编辑过]


我喜欢清新的空气!
2004-11-11 20:53
上海妹妹
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2004-11-7
得分:0 
多谢夸奖,我以后不懂的题目会常来请教的,谢谢你们啦!

我喜欢清新的空气!
2004-11-12 12:59
上海妹妹
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2004-11-7
得分:0 

问一下:while(*ptr)b=*(ptr+1),*(ptr+1)=c,c=b,ptr++;是什么意思?不太懂,好像没学过

是不是应该是:while(*ptr) {b=*(ptr+1);*(ptr+1)=c;c=b;ptr++:*p1=*p2++;} ?

[此贴子已经被作者于2004-11-12 17:47:35编辑过]


我喜欢清新的空气!
2004-11-12 17:41
上海妹妹
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2004-11-7
得分:0 

KNOCK:我用了你的这个方法,有点问题:

因为你是int t;int i=0;所以t,i都是整型,你用指针指向时,不可以直接+t,或+i,

char insert(char*p1,char*p2,int t) { char *ptr1=p1,*ptr2=p2; int i=0;

while(*ptr2)i++,ptr2++;/*计算p2字符个数*/

while(*ptr1)ptr1++; /*ptr1指向p1的未端*/

while(ptr1>=p1+t-1)*(ptr1+i)=*ptr1,ptr1--;/*应改为while(ptr1>=p1+4*(t-1)) *(ptr1+4*i)=*ptr1,ptr1--;*/

while(*p2)*(p1+t-1)=*p2,p1++,p2++; /*应改为while(*p2) *(p1+4*(t-1))=*p2,p1++,p2++*/ }

是不是应该这样?

[此贴子已经被作者于2004-11-13 12:04:24编辑过]


我喜欢清新的空气!
2004-11-13 12:01
上海妹妹
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2004-11-7
得分:0 
不过这样做还是有问题,结果他把a[]原样打印了,是不是因为指针p1没有用过的原因?

我喜欢清新的空气!
2004-11-13 12:35
上海妹妹
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2004-11-7
得分:0 

char insert(char*p1,char*p2,int t) { char *q1=p1,*q2=p2; int i;

for(i=0;*q2!='\0';i=++,q2++); /* 计算p2字符个数 */

if(*q1!='\0') q1++; /* q1指向p1末端 */

while(q1>=(p1+4*(t-1))) { *(q1+4*i)=*q1;q1--;} /* p1先行向后移i个位置*/

if(*p2++!='\0') { *(p1+4*(t-1))=*p2;p1++;} /*copy p2 to p1*/ }

main()

{char a[50],b[50];

int m;

gets(a);

gets(b);

scanf("%d",&m);

insert(a,b,m);

puts(a);

}

我输入:abcdefg

12345

3

应该输出:ab12345cdefg

而我的答案是abcdefg

我查了半天感觉上好象没什么问题,请指教!

[此贴子已经被作者于2004-11-13 18:32:00编辑过]


我喜欢清新的空气!
2004-11-13 18:24
上海妹妹
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2004-11-7
得分:0 

sizeof (char)表示有4个字节,我以为指针+1就等于加四,原来我理解错了,

输出的是efg, understand.thanks

但是:我没有乘以4,作出的答案也不对:

char insert(char*p1,char*p2,int t) { char *q1=p1,*q2=p2; int i;

for(i=0;*q2!='\0';i=++,q2++); /* 计算p2字符个数 */

if(*q1!='\0') q1++; /* q1指向p1末端 */

while(q1>=(p1+t-1)) { *(q1+i)=*q1;q1--;} /* p1先行向后移i个位置*/

while(*p2!='\0') {*(p1+t-1)=*p2;p1++;p2++;} /*copy p2 to p1*/ }

main()

{char a[50],b[50];

int m;

gets(a);

gets(b);

scanf("%d",&m);

insert(a,b,m);

puts(a);

}

我输入:abcdef

12345

2

输出:a12345b

请问怎么回事?


我喜欢清新的空气!
2004-11-14 12:56
上海妹妹
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2004-11-7
得分:0 

当我输入不同长度的字符答案也不同;

输入:abcdefg

12345

3

输出:ab12345

[此贴子已经被作者于2004-11-14 13:19:57编辑过]


我喜欢清新的空气!
2004-11-14 13:13
上海妹妹
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2004-11-7
得分:0 

[此贴子已经被作者于2004-11-14 21:59:00编辑过]


我喜欢清新的空气!
2004-11-14 21:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-7490-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029693 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved