程序员面试金典: 9.1数组与字符串 2写翻转字符串函数reverse(char* str)

#include 
#include 

using namespace std;

const int MAXSIZE = 10000;

/*
问题:用C或C++实现void reverse(char* str)函数,即翻转一个null结尾的字符串
分析:寻找到str最后的下标对应字符ch,然后从字符串末尾开始将
最好的方法就是找到字符串的开始和末尾,将首尾交换后,然后向中间继续靠近

输入:
chaoma
输出:
amoahc

关键:
1 本质就是寻找到字符串首尾指针,对于首尾处字符交换,然后向中间逼近
2 注意寻找到尾指针后,需要另last--,因为需使得尾指针在'\0'之前的一个字符
*/

void reverse(char* str)
{
	char* last = str;

	//如果还没有到达末尾
	while( (*last) != '\0' )
	{
		last++;
	}

	//最后一个字符串是结尾符,需要去除
	last--;
	char* begin = str;

	//只要前面小于后面,就交换
	while(begin < last)
	{
		char temp = * begin;
		//先*后++
		*(begin++) = *last;
		*(last--) = temp;
	}
}

int main(int argc, char* argv[])
{
	char str[MAXSIZE];
	while(cin >> str)
	{
		reverse(str);
		cout << str << endl;
	}
	system("pause");
	return 0;
}

你可能感兴趣的:(程序员面试金典)