题目描述:
输入⼀个字符串,写⼀个函数将⼀个字符串的内容逆序过来。
测试1:
输⼊:abcdef
输出:fedcba
测试2:
输⼊:abcdefg
输出:gfedcba
解法思路:
我们需要首先理解,逆序后的字符串与逆序之前的字符串的关系:
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;
}