逆序字符串
- 题目描述:
- 解法思路:
- 解法代码:
- 运行结果:
题目描述:
输入⼀个字符串,写⼀个函数将⼀个字符串的内容逆序过来。
测试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;
}