剑指offer之把字符串里面空格替换成百分之20[时间复杂度是O(n)]

1 问题

把字符串里面空格替换成20%

要求:时间复杂度是O(n)

 

 

 

 

 

 

2 思路

比如我们字符串ab cd ef,我们先计算出新字符串需要的长度,我们分别搞2个指针指向老的和新的字符串的尾巴,然后老字符串从'\0'开始拷贝数据到新的字符串尾巴,同时两个指针同时左移,如果老的字符串遇到了空格,那么老的字符串指针往左边移动一格,然后新的字符串指针依然向左移动并且填充'0' 、'2'、 '%',直到老的字符串指针到最左边或者老的字符串指针和新的字符串指针相等就不循环了

 

 

 

 

 

3 代码实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h> int insert(char *a, int len, char *replace, int replaceLen)
{//先得到多少个空格char *p = a;//先得到多少个空格int count = 0;int oldLen = 0;while (*p != '\0'){if (*p == ' '){++count;}++p;++oldLen;}//计算新的字符串长度int newLen = oldLen + count * (replaceLen - 1);printf("oldLen is %d\n", oldLen);printf("newLen is %d\n", newLen);if (newLen > len){printf("数组的长度不够\n");return -1;}//循环条件也就是需要移动的数组下标最左边while (oldLen >= 0) //或加上while(oldLen >=0 && oldLen < newLen){//if (*(a + oldLen) != ' ')和下面的if等价if (a[oldLen] != ' '){//这里用这个和下面的等价/***(a + newLen) = *(a + oldLen);newLen--;oldLen--;**/a[newLen--] = a[oldLen--];}else {oldLen--;a[newLen--] = '0';a[newLen--] = '2';a[newLen--] = '%';}}return 0;
}int main()
{//这里给出数组的大小长度不能小于空格替换%20后//新的数组的长度,我们后面的函数需要做出处理char a[20] ="ab cd ef";int len = sizeof(a);int result = insert(a, len, "%20", 3);if (result != 0){printf("insert fail\n");return -1;}printf("chars is %s\n", a);printf("区分strlen和sizeof\n");char c[] = "abc";char d[3] = "abc";char e[4] = "abc";char *p = "abc";printf("sizeof(c) is %d\n", sizeof(c));printf("sizeof(d) is %d\n", sizeof(d));printf("sizeof(e) is %d\n", sizeof(e));printf("sizeof(p) is %d\n", sizeof(p));printf("strlen(c) is %d\n", strlen(c));printf("strlen(d) is %d\n", strlen(d));printf("strlen(e) is %d\n", strlen(e));printf("strlen(p) is %d\n", strlen(p));return 0;	
}

 

 

 

 

 

4 运行结果

oldLen is 8
newLen is 12
chars is ab%20cd%20ef
区分strlen和sizeof
sizeof(c) is 4
sizeof(d) is 3
sizeof(e) is 4
sizeof(p) is 8
strlen(c) is 3
strlen(d) is 3
strlen(e) is 3
strlen(p) is 3

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/288758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

numpy拼接_巧用numpy切分图片

昨晚发了接受投稿文章&#xff0c;昨晚就有读者积极来文章啦&#xff0c;几轮邮件交流了修改意见后&#xff0c;今天就发布啦&#xff0c;这篇的稿费是300。之前无聊在刷视频的时候看到这么一个有意思的视频&#xff08;现在视频找不到&#xff0c;忘记关键字了 &#xff09;&a…

tcp有限状态机分析

tcp有限状态机分析2011-11-23 0 个评论 收藏 我要投稿 这幅图是TCP的状态机&#xff0c;看了2个小时&#xff0c;分析总结如下&#xff1a;&#xff08;1&#xff09;CLOSED 状态时初始状态。&#xff08;2&#xff09;LISTEN:被动打开&#xff0c;服务器端的 状…

【操作系统】对操作系统的了解

1.计算机操作系统的定义和概念&#xff1b; 操作系统是最靠近硬件的一层软件&#xff0c;它把裸件裸机改造成为完善的虚拟机&#xff0c;使得机器功能得到扩展&#xff0c;运行环境得到改善&#xff0c;系统效率得到提高&#xff0c;安全性能得到保证。一般来讲&#xff0c;操作…

C# 11 的这个新特性,我愿称之最强!

前言在日常开发中我们经常会将JSON、XML、HTML、SQL、Regex等字符串拷贝粘贴到我们的代码中&#xff0c;而这些字符串往往包含很多的引号"&#xff0c;我们就必须将所有引号逐个添加转义符\进行转义。这个转义十分麻烦&#xff0c;且容易出错&#xff0c;而当我们们需要替…

php中有两个美元符号$$的变量——可变变量

(*ˉ﹃ˉ) 好凉的天气&#xff01;~~~ 直接上代码&#xff1a; <?php $a hello; $$a world; echo "$a ${$a}"; 以上代码的第二句&#xff0c;我们是用两个美元符号的变量&#xff0c;那么在这里这个变量是我们可变变量。我以下从第一句开始详细解释&#x…

剑指offer之反向打印链表值

1 问题 反向打印链表值 2 思考 1&#xff09; 我们利用栈的思想&#xff0c;新进后出&#xff0c;把链表的每个元素分别入栈之后再打印栈 2&#xff09;既然上面用到了栈&#xff0c;我们应该就会想到用到递归来实现 3 代码实现 #include <iostream> #include <st…

php调用数据库中的图片地址显示不出来,图片显示不出来,但是数据库里有显示...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼index.phpinclude con.php;?>#container{width: 17%;margin: auto auto;}.news_list {list-style: none;}.loadmore {color: #ffffff;border-radius: 5px;width: 60%;height: 50px;font-size: 15px;background: rgba(148, 175,…

互联网打响云上争夺战:从计算到生态

阿里云&#xff1a;用人工智能治理城市 国内互联网企业的战场今年已从“地面”上升到“云端”&#xff0c;BAT先后对各自的云计算进行了品牌升级&#xff0c;网易等企业也开始积极参战&#xff0c;利用在技术积累及原有领域等方面的优势&#xff0c;通过与相关方合作&#xff0…

gtk+学习笔记(五)

今天继续做的是昨天那个界面对的优化&#xff0c;直接贴下代码&#xff0c; 1 void click_radio(GtkWidget *widget,gpointer *data)2 {3  GtkWidget *dialog;4  GtkWidget *box; 5  GtkWidget *pbox;6  GtkWidget *bbox; 7  GtkWidget *password_label,*passw…

python如何开启多线程_Python如何创建多线程

Python提供了_thread和threading两个模块来支持多线程&#xff0c;但_thread提供低级别的、原始的县城支持&#xff0c;以及一个简单的锁&#xff0c;通常情况下我们使用后者&#xff0c;来进行多线程编程创建多线程使用threading模块创建线程有两种方式&#xff0c;一种是调用…

C#委托、事件学习之(二)——简单按钮委托事件

一、打开Form.cs文件,写入3个一般形式的EventArgs事件show1(),show2(),show3()。 using System; using System.Windows.Forms;namespace WindowsFormsApplication2 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void show1(object se…

php中的匿名函数简单使用

直接上代码了&#xff1a; <?php $test1 function($value) {echo $value; };$test1(HelloWorld); ?> 不懂你们有没有一种感觉&#xff0c;看见了js&#xff1f;近视的我&#xff0c;看到了function 就以为js… 好了&#xff0c;你看看最开始&#xff0c;是不是一个…

css3 设置背景图片大小(缩略图形式缩小)

废话当然不说了。直接上代码 <style>#mycon{background:url(Tpl/1.jpg);background-size:400px 400px;background-repeat:no-repeat;border-radius: 4px;border: 1px solid #ccc;width: 400px;height: 400px;}</style> <div id"mycon">原来背景图大…

C# WPF UI框架MahApps切换主题

概述本指南将向您介绍MahApps.Metro如何切换主题&#xff0c;所有的MahApps.Metro的主题都包含在单独的资源字典中。如何使用主题您可以在以下可用配色方案中进行选择&#xff1a;"Red", "Green", "Blue", "Purple", "Orange&quo…

剑指offer之打印链表的倒数第N个节点的值

1 问题 打印链表的倒数第N个节点的值&#xff0c;&#xff08;要求能只能便利链表一次&#xff09; 比如链表如下&#xff0c;打印倒数第三个值就是4 1-> 2-> 3-> 4-> 5-> 6 2 思路 既然只要只能遍历一次&#xff0c;我们可以这样思考&#xff0c;比如我们要…

网盘搜索插件php源码,百度云网盘搜索引擎 PHP版 v1.0

百度云网盘搜索引擎是一个以PHPMySQL进行开发的网盘搜索引擎源码。百度云网盘搜索引擎运行运行环境 开始之前你需要安装* PHP 5.3.7 * MySQL* Python 2.7 ~* [xunsearch](//xunsearch.com/) 搜索引擎项目的目录结构___大致是这样的--- indexer/ #索引--- spider/ #爬虫--- sql/…

C#委托、事件学习之(三)——热水器烧水案例

using System;namespace DelegateExample {public class Heater{private int temperature;public string type = "RealFire 001"; // 添加型号作为演示public string area = "China Xian"; // 添加产地作为演示//声明委托public delegate void BoiledEvent…

【hive】——metastore的三种模式

Hive中metastore&#xff08;元数据存储&#xff09;的三种方式&#xff1a; 内嵌Derby方式Local方式Remote方式[一]、内嵌Derby方式 这个是Hive默认的启动模式&#xff0c;一般用于单元测试&#xff0c;这种存储方式有一个缺点&#xff1a;在同一时间只能有一个进程连接使用数…

IDC:第一季度全球服务器市场收入下滑4.6% 市场为重大升级做准备

根据IDC全球服务器市场季度追踪报告&#xff0c;2017年第一季度全球服务器市场的厂商收入同比下滑4.6%。整个服务器市场的增长继续放缓&#xff0c;大多数超大规模服务提供商都在等待今年第二季度部署英特尔新的Skylake处理器。高端服务器销售继续拖累整体市场表现&#xff0c;…

DataGridView很详细的用法

DataGridiew用法总结一、DataGridView 取得或者修改当前单元格的内容&#xff1a; 当前单元格指的是 DataGridView 焦点所在的单元格&#xff0c;它可以通过 DataGridView 对象的 CurrentCell 属性取得。如果当前单元格不存在的时候&#xff0c;返回Nothing(C#是null) // 取得当…