Aaron学习笔记

少壮不努力,长大没饭吃!
posts - 4, comments - 13, trackbacks - 0, articles - 37

字符串反序函数

Posted on 2009-01-18 12:09 赞劲小子 阅读(2803) 评论(1)  编辑 收藏 引用 所属分类: C和指针

    这是一个很简单的题,做的比较快,但是昨完后发现有问题,调试了好久,问了很多人,发现就是几个符号上弄错了,容易错的部分都写在了注释里面,闲了好好看下。
    题目:编写函数void reverse_string(char *string);该函数将string反向排列,不要使用下标,不要使用临时数组。

#include "stdio.h"   
#define MAX 50
void reverse_string(char *string);
int main(){
    
char name[MAX];
    gets(name);
    reverse_string(name);
    printf(
"%s",name);
    
return 0;
}

void reverse_string(char *string)
{
    
char *ptr = string;
    
/*
    *为什么当我把以下的while循环写成 
    *while(*ptr++ != '\0')
    *    ;
    *时,程序运行就出现错误了呢
    *for(ptr = string; *ptr != '\0';ptr++)
    *    ;
    *也是对的,这三种方法有什么不一样呢?
    
*/

    
/*
     *csdn上问了以后得到的答案
     *对于while(*ptr++ != '\0'); 语句---> 在循环结束时使ptr指向字符串结束符'\0'之后一个的位置,
     *所以是错误的 
     *修改:while(*ptr++ != '\0')
     *         ;
     *      ptr--;
     *      ptr--;
    
*/

    
while(*ptr!= '\0')
        ptr
++;
    ptr
--;

    
/*
    **以下三种对string的反序操作都是对的,注意while循环中的string < ptr语句中的<是不能
    **被!=代替的若被!=代替,那么对于字符串的长度是偶数的,就不起作用了,因为此时string
    **和ptr是永远不会相等的
    
*/

    
/*
    while(string < ptr){   
        char   temp;   
        temp = *string;  
        *string++ = *ptr;   
        *ptr-- = temp;   
    }   
    
*/

    
/*
    for(; string < ptr; ptr--,string++){
        char temp;
        temp = *string;
        *string++ = *ptr;
        *ptr-- = temp;
    }
    
*/

    
for(; string < ptr; ptr--,string++){
        
char temp;
        temp 
= *string;
        
*string = *ptr;
        
*ptr = temp;
    }

    
}

 

 

Feedback

# re: 字符串反序函数  回复  更多评论   

2011-05-04 12:51 by huxiaobo136
可以将char temp;声明在for循环的外面。谢谢~~

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理