题目描述
输⼊⼀个字符串,写⼀个函数将⼀个字符串的内容逆序过来。
解法思路
我们需要⾸先理解,逆序后的字符串与逆序之前的字符串的关系:
1. ⾸位与末位互换;
2. 第⼆位与倒数第⼆位互换;
3. ...
4. 最中间的两位互换,或者字符串⻓度为奇数时,中间字符不变。
因此,我们可以定义两个指针分别指向字符串⾸位和末位,对其进⾏交换操作,然后将两个指针相向移动⼀位,继续交换剩余字符。直⾄两个指针的相对位置发⽣变化时结束操作,最终得到的字符串即为逆序后的字符串。
解法代码
#include <stdio.h>
#include <string.h>
void reverse(char* str)
{
//利⽤库函数求得字符串⻓度
int len = strlen(str);
//定义两个字符串指针分别指向字符串⾸位和末位
char* left = str;
char* right = str + len - 1;
//当左指针在右指针左边时,进⾏交换
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
//两个指针相向移动⼀位
left++;
right--;
}
}
int main()
{
char arr[31] = { 0 };
//输⼊字符串
scanf("%[^\n]s", arr);
//对字符串进⾏逆序
reverse(arr);
printf("%s\n", arr);
return 0;
}
运行结果
输入:
123abc456
输出:
654cba321