字符串的两种逆序输出

(一)比如输入“abcd”,输出“dcba”

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
//#include 
char* reverse(char *s)
{
	char *p, *r;
	p = r = s;
	while ('\0' != *p)
	{
		p++;
	}
	p--;
	while (r < p)
	{
		*r = *r ^ *p;//这段代码不明白,各位路过的大牛看到后留言解个惑。
		*p = *r ^ *p;
		*r = *r ^ *p;
		r++;
		p--;
	}
	return s;
}
int main()
{
	char *x;
	char *y;
	char a[] = "1234";
	x = a;
	reverse(x);
	printf("x:%s", x);
	getchar();
	return 0;
	system("pause");
}

(二)单词逆序,比如输入“you love I”,输出“I love you”

#include
#include
#include 
// 对指针p和q之间的所有字符逆序
void ReverseWord(char* p, char* q)
{
	while (p < q)
	{
		char t = *p;
		*p++ = *q;
		*q-- = t;
	}
}
// 将句子按单词逆序
char* ReverseSentence(char* s)
{
	// 这两个指针用来确定一个单词的首尾边界
	char* p = s; // 指向单词的首字符
	char* q = s; // 指向空格或者 '\0'

	while (*q != '\0')
	{
		if (*q == ' ')
		{
			ReverseWord(p, q - 1);
			q++; // 指向下一个单词首字符
			p = q;
		}
		else
			q++;
	}

	ReverseWord(p, q - 1); // 对最后一个单词逆序
	ReverseWord(s, q - 1); // 对整个句子逆序

	return s;
}
int main()
{
	char *x;
	char *y;
	char a[] = "you love i";
	x = a;
	ReverseSentence(x);
	printf("x:%s", x);
	getchar();
	return 0;
	system("pause");
}

强烈推荐这篇文章,各种情况的字符串逆序,博主介绍的非常详细。

https://www.cnblogs.com/graphics/archive/2011/03/09/1977717.html

你可能感兴趣的:(C/C++)