回 帖 发 新 帖 刷新版面

主题:字符串倒置


#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个回复)

沙发

#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);
}

板凳

交换过了!
也就是开始的时候的确交换过来了;
但是后面还在循环也就还原了!
循环一半试一下!

我来回复

您尚未登录,请登录后再回复。点此登录或注册