/********************************************\
|????歡迎轉(zhuǎn)載, 但請保留作者姓名和原文鏈接, 祝您進(jìn)步并共勉!???? |
\********************************************/
C與C++編程一頭一尾最重要, 無數(shù)英雄折腰, 多少豪杰翻船!
作者: Jerry Cat
時間: 2006/04/22
鏈接: http://www.shnenglu.com/jerysun0818/archive/2006/04/22/6086.aspx
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//Fuction: BOOL revstr(char *str);
//Purpose: reverse a string
//Author:? Jerry
//Time:???? 04/22/2006
//Feature: This version is suitable for both sring and char array
char* revstr(char *str)
{
??? int nCnt = 0, len = strlen(str);
??? char* tmpstr = (char*) malloc(len+1);
??? if???? (tmpstr) strcpy(tmpstr, str);
??? else { printf("\n malloc error!\n"); return 0; }
??? for(--len, tmpstr = tmpstr + len; len > 0; *str++ = *tmpstr--, --len, ++nCnt);
??? *str = *tmpstr; //C/C++編程一頭一尾最重要, 無數(shù)英雄折腰, 多少豪杰翻船!
??? free(tmpstr);
??? return str - nCnt;
}
上面方法不好, 繁雜且易出錯, 經(jīng)沐楓兄指點, 下面?zhèn)z是改進(jìn)版^_^
char* revstr(char *str)
{
??? char c, *head = str, *tail = str + strlen(str) -1;
??? for(; head < tail; c = *head, *head++ = *tail, *tail-- = c);
??? return str;
}
char* revstr(char *str)
{?? //省去一變量, 時間換空間法
??? char *head = str, *tail = str + strlen(str) -1;
??? for(; head < tail; *head=*head ^ *tail, *tail=*head ^ *tail, *head=*head++ ^ *tail--);
??? return str;
}?