当前位置: 首页 > news >正文

替换空格问题

替换空格问题

    • 一. 问题描述
    • 二. 思路分析
    • 三. 代码展示

)

这是一个典型的双指针问题

一. 问题描述

请实现一个函数,将一个字符串中的每个空格替换成“%20”。
例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

二. 思路分析

我们先来做一个简单的问题 假设这个字符串只有一个空格

在这里插入图片描述
那么我们只需要从最后面开始分别输入

‘0’ ‘2’ ‘%’ 这三个字符就可以

我们可以发现 后来的字符串比原来的字符串长度长2

那么 如果是两个空格呢?

如果是三个空格呢?

我们通过研究可以发现 有多少个空格 那么后面一个字符串会比前面一个字符

多几个二

那么我们只要设立两个指针 一个指针指向改变后最后面的字符

一个指针指向改变前最后面的字符

让这两个指针分别 –

如果前面的一个指针遇到空格 那么后面的一个指针就往前移动并修改三个字符的内容

如果前面的一个指针遇到的不是空格 那么后面的一个指针就接受前面一个指针的内容

综上

三. 代码展示

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include<assert.h>



// 指针指向的是字符串的起始位置 
// 长度就是整个字符串的长度
void typechange(char* str, int length)
{
	int count = 0;
	int i = 0;
	char* tmp = str;
	for (i = 0; i < length; i++)
	{
		if (*str == ' ')
		{
			count++;
			str++;
		}
		str++;
	}

	int end1 = length - 1;
	int end2 = length + 2 * count - 1;
	while (end1!=end2)
	{
		if (tmp[end1] != ' ')
		{
			tmp[end2] = tmp[end1];
			end2--;
			end1--;
		}
		else
		{
			tmp[end2--] = '0';
			tmp[end2--] = '2';
			tmp[end2--] = '%';
			end1--;
		}
	}
	
}



int main()
{
	char arr[100] = "we are family";
	// 要求 将所有的空格变成%20
	typechange(arr, strlen(arr));
	puts(arr);
	return 0;
}

以上就是本篇博客的全部内容啦 由于博主才疏学浅 所以难免会出现纰漏

希望大佬们看到错误之后能够不吝赐教 在评论区或者私信指正 博主一定及时修正

那么大家下期再见咯

相关文章:

  • OpenCV-滤波矩阵(java版)
  • 前端性能优化 - 华为面试题
  • netsh命令设置IP地址/DNS服务器地址(域设置)
  • 【Python 小白到精通 | 课程笔记】第三章:数据处理就像侦探游戏(函数和包)
  • 以太坊未来⼗年的的破局之路:区块链模块化+合并成功后,以太坊交易者需要读懂这些数据
  • 使用Vue和SpringBoot开发实验室耗材智能运维系统
  • kubernetes(9)集群安全机制
  • Google Earth Engine (GEE) ——加载2015年乌干达MODIS的LST并绘制时序图
  • 【Linux初阶】Linux下用户的新建和删除 | 查看服务器用户数、在线数、当前用户
  • 2022华为杯研究生数学建模赛题思路分析
  • PTA 3+2 转段考试 数据库mysql(3篇)
  • 【C语言进阶】函数栈帧的创建和销毁(内功修炼)
  • 结构体数组与结构体指针
  • PTA 3+2 转段考试 数据库 mysql(3篇)
  • 技术创新助力港口自动化与智能化
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • JS函数式编程 数组部分风格 ES6版
  • Linux各目录及每个目录的详细介绍
  • maya建模与骨骼动画快速实现人工鱼
  • SpriteKit 技巧之添加背景图片
  • vue.js框架原理浅析
  • Webpack入门之遇到的那些坑,系列示例Demo
  • Yeoman_Bower_Grunt
  • 二维平面内的碰撞检测【一】
  • 给第三方使用接口的 URL 签名实现
  • 简单易用的leetcode开发测试工具(npm)
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • MPAndroidChart 教程:Y轴 YAxis
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 关于Android全面屏虚拟导航栏的适配总结
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • #pragma预处理命令
  • (Java数据结构)ArrayList
  • (初研) Sentence-embedding fine-tune notebook
  • (九)信息融合方式简介
  • .apk 成为历史!
  • .net core 6 集成和使用 mongodb
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .Net Core 中间件验签
  • .Net mvc总结
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .net 托管代码与非托管代码
  • .Net的C#语言取月份数值对应的MonthName值
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • []常用AT命令解释()
  • [1181]linux两台服务器之间传输文件和文件夹
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [Android Pro] android 混淆文件project.properties和proguard-project.txt
  • [C++提高编程](三):STL初识
  • [IE9] IE9 beta版下载链接