主题:字符串倒置
qtwg
[专家分:30] 发布于 2010-11-28 15:45:00
#include "stdio.h"
char ch(char *p)
{
char *q=p,t;
int a,z;
a=strlen(p);
while(*q!='\0')q++;
q--;
while(q>p) \**不同处**\
{
t=*p;*p=*q;*q=t;
p++;q--;
}
}
void main()
{
char b[]="abcdefg";
ch(b);
puts(b);
}
为什么上面这个能够达到目的,而下面的却不能呢?
#include "stdio.h"
char ch(char *p)
{
char *q=p,t;
int a,z;
a=strlen(p);
while(*q!='\0')q++;
q--;
for(z=0;z<a;z++) \**不同处**\
{
t=*p;*p=*q;*q=t;
p++;q--;
}
}
void main()
{
char b[]="abcdefg";
ch(b);
puts(b);
}
回复列表 (共2个回复)
沙发
cfj469933485 [专家分:950] 发布于 2010-11-28 19:09:00
#include <stdio.h>
#include <string.h>
void ch(char *p)
{
char *q = p, t;
while(*q!='\0')q++;
q--;
while(q>p)
{
t=*p;*p=*q;*q=t;
p++;q--;
}
}
void main()
{
char b[]="abcdefg";
ch(b);
puts(b);
}
#include <stdio.h>
#include <string.h>
void ch(char *p)
{
char *q=p,t;
int a,z;
a=strlen(p);
while(*q!='\0')q++;
q--;
for(z=0;z<a/2;z++)//此处修改了,楼主应该明白什么意思啊,我一步步解释
首先第一个程序为什么可以比较指针大小呢?(若两个指针指向同一数组的元素,则可以进行比较。数组是连续的一段内存,后面地址比前面的地址大)一开始q,p都都指向了数组首地址,也就是&b[0]
while(*q!='\0')q++;q--;while语句,使指针q指向了'\0',然后指针q--,也就是指向了数组中最后第二个数,这里是g
第一个程序:就是通过比较地址的大小,然后交换数组里面的数值,知道q<=p;
而第二个程序:楼主已经计算出数组的大小了,但是a = 7,这里交换就是
a[6]和a[0]交换a[5]和a[1]交换a[4]和a[2]交换a[3]不交换。所以循环只能到a/2就够了,楼主可以拿起笔,自己写一下,就明白了。不知道我这样说,楼主明白不?
还有楼主格式不好,而且拿到程序,就有错,编写的ch函数没有返回值,那就不要int型的数撒?用void.
{
t=*p;*p=*q;*q=t;
p++;q--;
}
}
void main()
{
char b[]="abcdefg";
ch(b);
puts(b);
}
板凳
lukexc [专家分:50] 发布于 2010-11-28 19:51:00
交换过了!
也就是开始的时候的确交换过来了;
但是后面还在循环也就还原了!
循环一半试一下!
我来回复