栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

目录
      • 题目要求:
      • 磊逆置法
      • 參图解
      • 代码

题目要求:

字符串: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遇到的是,说明已经到了字符串的尾了,退出循环


參图解


代码
#include
#include
#include

//区间逆置
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指向的字符不是
	while (*end != '')
	{
        //当end没有遇到 和空格就继续
		while ( (*end != '')  && (*end != ' '))
		{
			end++;
		}
        //当end跳出循环时,指向的就是空格或者  逆置[start,end-1]的内容
		reverse(start, end-1);
        //end向后移动,进行下一次循环
        //start从end位置开始,重新定义起始区间
        end++;
		start = end;
	}
	printf(str);
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/648307.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号