来自网络,书籍,在此对原作者表示感谢!
给定一个字符串s,将s中的字符顺序颠倒过来,比如s="abcd",逆序后变成s="dcba"。
原地逆序(原字符串已经改变)
英文叫做in-place reverse。这是最常考的,原地逆序意味着不允额外分配空间,主要有以下几种方法,思想都差不多,就是将字符串两边的字符逐个交换,如下图。给定字符串"abcdef",逆序的过程分别是交换字符a和f,交换字符b和e,交换字符c和d。
一 设置两个指针,分别指向字符串的头部和尾部,然后交换两个指针所指的字符,并向中间移动指针直到交叉。
char* Reverse(char* s)
{
// p指向字符串头部
char* p = s ;
// q指向字符串尾部
char* q = s ;
while( *q )
++q ;
q -- ;
// 交换并移动指针,直到p和q交叉
while(q > p)
{
char t = *p ;
*p++ = *q ;
*q-- = t ;
}
return s ;
}
逆序打印(原字符串没有改变)
还有一类题目是要求逆序输出,而不要求真正的逆序存储。这题很简单,这里仅是提供一个思路而已。
先求出字符串长度,然后反向遍历即可。
void ReversePrint(const char* s)
{
int len = strlen(s) ;
for (int i = len - 1; i >= 0; --i)
cout << s[i];
}
文章转载出处:
http://www.cnblogs.com/graphics/archive/2011/03/09/1977717.html