【漫步刷题路】- 逆序字符串II

举报
芒果_Mango 发表于 2022/01/12 09:31:46 2022/01/12
【摘要】 🚀题目要求:字符串:I love you逆序后结果: you love me 🥇逆置法假设逆置: Man Max->整体逆置: xaM naM->分别逆置 对xaM逆置:Max​ 对naM逆置:Man->最终结果为: Max Man🚖思路:先整体逆置定义两个指针,一个start,一个end,end负责移动。遇到字符串的空格就停下来,逆置[...

🚀题目要求:

字符串:I love you

逆序后结果: you love me


🥇逆置法

假设逆置: Man Max

->整体逆置: xaM naM

->分别逆置 对xaM逆置:Max

​ 对naM逆置:Man

->最终结果为: Max Man


🚖思路:

  • 先整体逆置

  • 定义两个指针,一个start,一个end,end负责移动。遇到字符串的空格就停下来,逆置[start,end-1]区间字符的内容 然后end和start指向end+1的位置。再继续寻找空格

  • 当end遇到的是\0,说明已经到了字符串的尾了,退出循环


🥫图解

在这里插入图片描述


🍔代码

#include<stdio.h>
#include<assert.h>
#include<string.h>

//区间逆置
void reverse(char* left, char* right)
{
	assert(left && right);
	while (left < right)
	{
		char str = *right;
		*right = *left;
		*left = str;
		right--;
		left++;
	}
}
int main()

{
	char str[100] = "Chase the wisdom 99";
	int len = strlen(str);
	//1.先整体逆置
	reverse(str, str + len - 1);
	//2.分别逆置,以空格为分隔 
	char* end = str;
	char* start = str;
    //循环判断条件:end指向的字符不是\0
	while (*end != '\0')
	{
        //当end没有遇到\0 和空格就继续
		while ( (*end != '\0')  && (*end != ' '))
		{
			end++;
		}
        //当end跳出循环时,指向的就是空格或者\0  逆置[start,end-1]的内容
		reverse(start, end-1);
        //end向后移动,进行下一次循环
        //start从end位置开始,重新定义起始区间
        end++;
		start = end;
	}
	printf(str);
	return 0;
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。