字符串翻转的两种方法(1:利用额外空间 2:交换)

#include<iostream>
using namespace std;
#define STRLENTH 100

char *str_reverse1(char *str)
{
	char temp[STRLENTH];//字符数组:存放逆序后的字符
	char *p = str;      //字符指针:指向最后一个非'\0'字符
	int i = 0;

	/*找到最后一个非'\0'字符并使p指向它*/
	while(*p != '\0')
	{
		p++;//while循环之后p指向'\0'p--后指向数组的最后一个字符(非'\0')
	}
	p--;

	/*将逆序后的字符存放在临时空间temp中*/
	while(p != str)
	{
		temp[i] = *p;
		i++;
		p--;
	}
	temp[i] = *p;    //while循环之后第一个字符未存放进去
	temp[i+1] = '\0';//数组末尾f赋'\0'

	/*将逆序之后的字符拷贝到原数组中*/
	strcpy(str,temp);
	return str;

}
char *str_reverse2(char *str)
{
	char *p = str;  //字符指针:指向最后一个非'\0'字符
	char *ret = str;//字符指针: 用于返回数组的首地址

	/*找到最后一个非'\0'字符并使p指向它*/
	while(*p != '\0')
	{
		p++;
	}
	p--;
	/*对称的字符交换---->达到字符的翻转*/
	char tmp;
	while(str < p)
	{
		tmp  = *str;
		*str = *p;
		*p   = tmp;
		str++;
		p--;
	}
	return ret;
}

int main()
{
	char str[] = "abcdefghij";
	cout<<str_reverse2(str)<<endl;
	return 0;
}

字符串翻转的两种方法(1:利用额外空间 2:交换)_第1张图片

你可能感兴趣的:(交换,字符串翻转,临时空间)