文章目录
题目思路解题图解及代码
大家好,今天我们来看这道题:
题目
将一句话的单词进行倒置,标点不倒置。比如 “I like beijing.”,经过处理后变为:“beijing. like I”。 字符串长度不超过100。 输入描述:输入一个仅包含小写字母、空格、‘.’ 的字符串,长度不超过100。 ‘.’ 只出现在最后一个单词的末尾。 输出描述:依次输出倒置之后的字符串,以空格分割。
思路
我们可以先逆序整句再逆序每个单词 接下来让我们看如何实现吧!
解题
首先可以逆序整个字符串将首地址和首地址+字符串长度-1(数组下表从0开始)传入逆序函数,完成对整个字符串的逆序 start 和 cur 先同时指向起始位置然后遍历字符串,没有找到空格或没结束都给cur+1继续寻找 找到空格后,将start作为left 和 cur-1字符作为right传入逆序函数 完成中间这组单词的逆序
完成一个单词的逆序之后把cur+1的指向start作为下一个起始点 cur指针继续遍历,直到出现下一个空格重复以上步骤 所以我们可以看出这是一个循环,当cur指向为’\0’时跳出循环 ![在这里插入图片描述](https://img-blog.csdnimg.cn/0d3f24c442dd4e558cb0878a31e51859.png)
图解及代码
![单词逆序·](https://img-blog.csdnimg.cn/d67e209161984ef5bc6a072ef298e222.png)
#include
#include
void reverse(char* left, char* right)
{
while(left
char arr[101] = {0};
gets(arr);
int len = strlen(arr);
int i = 0;
//整体交换
reverse(arr,arr+len-1);
//printf("%s", arr); //逆序成功
//交换每个单词
char* start = arr; //start指向起始位置
char* cur = arr;
while (*cur)
{
//cur指向空格位置或'\0'时停止
while (*cur != ' ' && *cur != '\0')
{
cur++;
}
reverse(start, cur - 1);
start = cur + 1;
if (*cur == ' ')
{
cur++;
}
}
printf("%s\n", arr);
return 0;
}
今天的每日一题就到这里了,欢迎大家点赞收藏,关注我一起成长!
|