在学期C语言前期,经常会遇到一个经典的题目:倒序字符串。这个题目利用指针可以很简单地得到解决。句子倒叙需要用到这个思想,在正式句子倒叙之前我们先来倒叙字符串。
#include <stdio.h>
void reverse(char* arr,char* right)
{
char* left = arr;
while (left < right)
{
char temp = *left;
*left = *right;
*right = temp;
left++;
right--;
}
}
int main()
{
char arr[100];
gets(arr);//接受空格输入
printf("Orignal:%s\n", arr);
int len = strlen(arr);
char* end = arr + len - 1;
reverse(arr, end);
printf("After reverse:%s\n", arr);
return 0;
}
这里进行输入输出测试:输入hello world!输出结果为:
那么对于句子倒叙这个题目来说,假设输入:hello world! 输出:world!hello 句子中的单词位置发生倒叙,而单词本身不发生倒叙,那么我们可以先将整个字符串进行倒叙,然后将每一个单词再次进行倒叙,就会达到题目要求的效果。基于上面的倒叙函数,我们现在问题就是分割每一个单词,然后调用reverse函数,传入的指针应该为:单词起始位置的指针和结束位置的指针。
#include <stdio.h>
void reverse(char* arr,char* right)
{
char* left = arr;
while (left < right)
{
char temp = *left;
*left = *right;
*right = temp;
left++;
right--;
}
}
int main()
{
char arr[100];
gets(arr);//接受空格输入
printf("Orignal:%s\n", arr);
int len = strlen(arr);
char* end = arr + len - 1;
reverse(arr, end);
//分割每一个单词并进行倒叙
char* cur = arr;//记录当前位置
while (*cur)
{
char* left = cur;//记录单词起始位置
while (*cur != ' ' && *cur != '\0')
cur++;
reverse(left, cur - 1);//循环结束cur指向'\0'
if (*cur != '\0')//句子结束时,cur停止加1
cur += 1;
}
printf("result:%s\n", arr);
return 0;
}
运行结果:
标签:arr,right,cur,倒叙,C语言,char,句子,left From: https://blog.csdn.net/qq_70199082/article/details/143330962