在这里插入图片描述

(目录)

题目要求:

如:字符串内容为:abcd 逆序后结果:dcba


注意事项:

不能逆序指针指向的常量字符串!因为常量字符串不能修改

要使用字符数组

//例如
char* p = "abcd";//不能逆序p指向的内容

思路:对撞指针(双指针)

1.定义两个指针,一个指向字符串的左边,一个指向字符串的右边。二者指向的字符进行交换。左指针右移,右指针左移

2.当满足left < right 条件则继续交换 不满足则说明二者相遇了,或者left>right了。逆序完成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tvwTJD6G-1638873315554)(C:\Users\Mango\AppData\Roaming\Typora\typora-user-images\image-20211006101225643.png)]


(img-JjbyEDP9-1638873315555)(C:\Users\Mango\AppData\Roaming\Typora\typora-user-images\image-20211006101421400.png)]

代码:

void reverse(char* str)
{
	int len = strlen(str);
	char* left = str;//指向字符串的起始位置
	char* right = str + len -1 ;//指向字符串的末尾(\0之前)
    
    //当left和right指向同一个字符不需要交换,所以判断条件写成left<=right即可
	while (left < right)
	{
        //字符交换
		char tmp = *left;
		*left = *right;
		*right = tmp;
        //区间缩减
		right--;
		left++;
	}
}
int main()
{
	char str[20] = "abcd";
	reverse(str);
	printf("%s\n", str);
	return 0;
}