标题:用指针做:字符串的插入
只看楼主
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
得分:0 

等同:

while(*ptr!='\0')

{

b=*(ptr+1);

*(ptr+1)=c;

c=b;

ptr++;

}


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-11-12 17:44
上海妹妹
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
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
得分:0 

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

2004-11-13 15:13
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
得分:0 
[QUOTE]

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

[/QUOTE]

可以的

我又看了一遍,没看发现有什问题,告诉我你调试出错详细情况,最好贴上程序。


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-11-13 16:13
上海妹妹
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
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
得分:0 

while(q1>=(p1+4*(t-1))) { *(q1+4*i)=*q1;q1--;}

你能告诉我为什么要乘上个4???

char *p="abcdefg";

char *q;

q=p+4;//看看书,搞清这句+4编译器是如何处理的,还可以int a=4; q=p+a;

priintf("%s",q);//运行一下这几句


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-11-13 18:47
上海妹妹
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
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
得分:0 

一句一句地把你的程序与我的对比一下,有两个错误。首先要理解,提示你一下:

1。变量的自增

2。if 与 for ,while 的区别


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-11-14 19:29



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




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

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