前言:简单题
题目展示:
这个题目跟我今天要讲的题很类似,可以说是一摸一样的体型,而本体中则是让我们将所有的字符逆序,这则很简单。
#include <stdio.h>
#include <assert.h>
void reverse(char* left, char* right)
{
assert(left && right);
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
int main()
{
char arr[101] = {
0 };
gets(arr);
int len = strlen(arr);
reverse(arr, arr + len - 1);
printf("%s", arr);
}
通过找到数组中的最后一位和第一位进行交换。
题目展示
题目如下:
题目分析
这两个题进行对比发现
我们可以在第一道题的基础上,再进行了一次逆序。
方法一
方法一相当简单,我们会用代码一的代码进行继续编写。
通过用逆序每个单词的方式写出代码
#include<stdio.h>
#include<assert.h>
void Rev(char*left,char*right)
{
assert(right && left);
while (left > right)
{
int bmp = *left;
*left = *right;
*right = bmp;
left++;
right--;
}
}
int main()
{
char arr[101] = {
0 };
gets(arr);//获取arr字符
int len = strlen(arr);
//整体逆序
Rev(arr, arr + len - 1);
//个别单词逆序
char* cur = arr;
while (*cur)
{
char* start = cur;
while (*cur != ' '&&cur!='\0')
{
cur++;
}
Rev(start, cur - 1);
if (*cur == ' ')
{
cur++;
}
}
printf("%s\n", arr);
}
通过先逆序两次字符串的方式,写出代码。
注意:'\0’和‘ ’需要考虑到位,否则会越位访问。
方法二
投机的方法
#include<stdio.h>
void reverse() {
char *arr[101];
if (scanf("%s",arr)!= EOF) {
reverse();
printf("%s ", arr);
}
}
int main() {
reverse();
return 0;
}
通过用递归的方式写出代码。