字符串面试题系列之五:删除字符串空格

几率大的现场手撕算法面试题(含答案) 现场手撕算法面试题个人经历比较少,但会收集网上面经,一般线下要求手撕算法的次数更多,其次就是来个共享链接自己在电脑上写代码。这个系列将会持续更新。 先提前了解一些常用的类以及方法: 类 Scanner: 从控制台输入: 方法一: Scanner sc = new Scanner(System.in); //构造一个Scanner对象实例 String queue = sc.next(); //接受... 阅读详情

前言

********************************************************************************************************************
本系列文章所提供的算法均在以下环境下编译通过。
 【算法编译环境】Federa 8,linux  2.6.35.6-45.fc14.i686
 【处理器】           Intel(R) Core(TM)2 Quad CPU    Q9400  @ 2.66GHz 
 【内存】               2025272 kB

 如果有问题或者纰漏或者有好的建议更或者有更好的算法,请不吝赐教。
************************************************************************************************************************

正文

 无论是在面试当中还是在项目当中,去除多余的空格都是十分常见的。所以面试官或者笔试当中这个题目问的还是比较多的。即字符串左边空格,右边空格,然户字符串中如果有几个空格则合并成一个空格。笔者在写一个命令行参数程序时,就觉得去除空格十分有用。比如,当用户输入一个命令及其参数的时候i,多一个空格或者多一个Tab很正常,这样解析的时候就需要对输入的字符串进行处理。这样删除字符串空格就显得十分必要了。

去除空格

【题目】写一个去除字符串左边空格,右边空格,字符串中如果出现多个空格,则合并成一个空格的程序。
【例子】输入[    a    b    c    ],则输出abc。

 【分析】本题思路很简单,大笑,对字符串扫描一遍即可完成功能。怎么做的呢?好,我们考虑三个步骤,第一个步骤是去掉左边空格;第二个步骤是去掉中间空格;第三个步骤是去掉右边空格;我们让i指向字符串首地址,这个指针是专门存储字符的,用j来扫描空格。如果j指向空格,则直接跳过,如果遇到字符,就将其复制到i的位置,i指向下一个位置。对于中间的空格,j扫描,直到遇到非空格字符停止,在i的位置上加一个空格再加一个字符,这就是多个空格合并成一个空格。末尾的空格j显然都是直接忽略不计的。最后记得要新位置上要补上'\0'噢。下图显示的就是算法的过程:


其实就是用i指针来控制输出,j指针来处理空格字符和非空格字符。这么说简单明了吧。

算法的文字描述如下:

第一步:初始化:用i指针控制输出开始为0,j指针从0处开始扫描;
第二步:左边空格:当j遇见第一个不是空格的字符,赋给i处.i指向下一位;

第三步:中间以及后面空格:继续扫描,如果遇见空格则赋给i处,i指向下一位,后面空格就忽略直到下一个不是空格字符赋给i处,i指向下一位;

第四步:给字符串加一个'\0'并且返回。算法结束。

基于上面的文字思路基础上,我们写下如下的code:

#include <iostream>
#include <cstring>

char * del_space( char * const string )
{
   char *p = string;
   int j = 0;
   // delete left space
   while( *p == ' ' )
   {
      p++;
   }
   // delete spaces among characters
   while( *p != '\0' )
   {
      if( *p != ' ' )
      {
         string[j++] = *p;
      }
      else
      {
         while( *p == ' ' )
         {
            p++;
         }
         string[j++] = ' ';
         p--;
      }
      p++;
   }
   string[j] = '\0';
   return string;
}

int main( int argc, char ** argv )
{
   char string[] = "    Hello my    word !    ";
   char * result = del_space( string );
   std::cout << result << std::endl;
}

作者:Alex

出处:http://blog.youkuaiyun.com/hellotime
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
从信息学奥赛题到面试题:手把手拆解‘过滤多余空格’的算法思路与边界条件 本文深入解析了从信息学奥赛到技术面试中常见的'过滤空格'算法问题,详细介绍了双指针法的核心思想、边界条件处理及数据结构选择。通过对比字符数组与string类的性能差异,展示了如何将竞赛算法转化为工程实践,并提供了C++、Python和JavaScript的多语言实现方案,帮助开发者全面提升字符串处理能力。 阅读详情

相关推荐

【无标题】 Python自动化法律文书撰写

Jinja2是一个功能强大的模板引擎,支持丰富的语法和功能。除了条件判断和循环语句外,Jinja2还支持过滤器、宏、继承等高级特性,非常适合处理复杂的文书模板。

master_chenchen的博客 2062

字符串中的空格

字符串中的空格

m0_74310050的博客 1135

【TiktokAPI】Tiktok直播API与实时互动功能开发完全指南

Tiktok直播API允许开发者创建、管理直播,并实现各种互动功能。/*** 获取Tiktok直播API访问令牌* @param {string} client_id - 应用ID* @param {string} client_secret - 应用密钥* @param {string} code - 授权码* @param {string} redirect_uri - 重定向URI* @returns {Promise<object>} 访问令牌响应*/try {}),

Mageia的专栏 3191

(C语言)输入一个字符串,删掉其中的空格,把其余的字符按照原来的顺序存放输出

对字符串某一个字符的删除

m0_73633088的博客 3009

深入解析:如何在Visual Studio中高效编译libredwg与libdxfrw

本文详细介绍了在Visual Studio中高效编译libredwg与libdxfrw的完整流程,包括环境配置、源码获取、CMake技巧及常见错误解决方案。针对CAD开发者,提供了从基础编译到项目集成的实用指南,帮助快速处理DWG/DXF文件,提升开发效率。

weixin_29215391的博客 232

UVC协议在STM32H7上的移植实战案例

手把手带你把UVC协议移植到STM32H7平台,重点解决USB高速枚举、视频流控制与YUV数据打包等关键问题。基于HAL库实现符合UVC 1.5规范的即插即用摄像头功能,让嵌入式设备轻松变身标准UVC视频源。

weixin_42437253的博客 397

输入一个字符串并且删除其中的空格并输出

printf("请输入一个字符串:");

2301_81324046的博客 871

[模型部署]-[LLM]昇腾部署Qwen3-Coder-30B-A3B-Instruct

摘要:本文介绍了在Ascend NPU上部署Qwen3-Coder-30B-A3B-Instruct大模型的实践过程。通过vLLM-Ascend框架,详细说明了环境准备(CANN 8.1、PyTorch-NPU 2.5.1等)、模型下载、容器启动及服务部署步骤,包括vLLM服务的启动参数配置和接口测试方法。测试结果显示在当前2卡910B3配置下性能表现仅为8token/s(1并发),并指出流式调用时存在无法输出usage信息的问题。该方案为Ascend平台私有化部署大模型推理服务提供了参考实现。

1668

计蒜客信息学入门赛 #16--A

现在有nn个字符串,其中包含一些空格,现在希望你将所有字符串中的空格删除后输出。 输入格式 输入的第一行只有一个正整数nn,表示共有nn个字符串。 第二行至第n+1n+1行共nn行,每行是一个字符串(由大小写英文字母和空格组成)。 输出格式 输出有n+1n+1行,第一行只有一个正整数,表示总共删除的空格数。第二行至第n+1n+1行共nn行,每行表示一个删除...

queque_heiya的博客 955

《华为项目管理之道》第1章笔记

performance indicator,KPI)纳入个人绩效承诺书,贯彻结果导向的理念,以向员工。客户需求是华为发展的原动力,为客户服务是华为存在的唯一理由。目经理‘用兵’,依靠市场机制‘调兵’”,打破了人员在功能部门的板结,实现了听得。为管理者选拔的必要条件,项目经理成为人人向往的岗位。《华为项目管理之道》,是新出的华为官方的项目管理书,整个书不错。伴随着项目型组织的建立,华为逐步形成了完备的项目管理流程和制度,从而将业务运。为此,通过改革,重新明确了项目经理承担的经营责任,并开始以项。

jackyrongvip的专栏 2127

PyTorch实战(12)——图神经网络(Graph Neural Network,GNN)

在本节中,我们首先简要概述了图神经网络 (Graph Neural Network, GNN) 的核心概念与应用,GNN 通过构建计算图分层聚合节点特征,解决了传统神经网络处理图数据时的四大局限:信息深度不足、节点顺序敏感、动态扩展困难和特征稀疏性问题。了解了不同类型的图学习任务(包括节点级、边级和图级三大类)。接着我们研究了几种流行的 GNN 模型,包括:GCN (通过权重共享实现图卷积)、GAT (引入注意力机制区分邻居重要性)和 GraphSAGE (采用随机采样应对大规模图)。

盼小辉丶的博客 3635

【面试题】将字符串中的所有空格去掉,要求时间复杂度O(n),空间复杂度O(1)

//题目:将字符串中的所有空格去掉,要求时间复杂度O(n),空间复杂度O(1) #include &lt;iostream&gt; #include &lt;string.h&gt; #include &lt;assert.h&gt; using namespace std; int delSpace(char *pStr) {     assert(pStr);     char *...

fzzjoy的专栏 2588

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

c语言实现将字符串首尾*删除,java 编写函数将字符串的首尾空格删除。

String 类有个方法去除字符串首位空格: str.trim();查看源代码:public String trim() {int len = value.length;int st = ;char[] val = value; /* avoid getfield opcode */while ((st < len) && (val[st] <= ' ')) {s...

weixin_30750685的博客 582

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

面试100题系列之2字符串删除多余空格

其实就是删除多余的空格,其实两种方法,一种是在第一个遇到的单词前面加空格,这样的话需要考虑串首的情况。可以用flag来标记是不是句子的第一个单词。另一种方法是在单词结束的字符后面加空格,但需要考虑字符串以空格结尾的情况,遍历完字符串之后,直接判断最后一个元素是不是空格就可以了。第二种方法更直观一点。 如果不仅仅是空格,还有回车。参考扩展问题及其再思考。 #include #include

kay_zhyu的专栏 947

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C++之《剑指offer》学习记录(9):字符串&替换空格

C++之《剑指offer》学习记录(9):字符串&替换空格

S13352784013的博客 1015

[leetcode 剑指offer系列] 面试题05. 替换空格

题目难度: 简单 原题链接 今天继续更新剑指 offer 系列, 这道题相对比较简单, 但也有多种实现方案, 可以用来扩展思路. 大家在我的公众号"每日精选算法题"中的聊天框中回复 offer 就能看到该系列当前已经更新的文章了 大家有什么想法建议和反馈的话欢迎随时交流, 包括但不限于公众号聊天框/知乎私信评论等等~ 题目描述 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 0 <= s 的长度 <= 10000 题目样例 示例 输入 s = "We are hap.

随便发挥的博客 242

【Java面试系列】Linux面试题

目录 1.Linux 面试题 2.Linux 面试题答案解析 1、绝对路径用什么符号表示?当前目录、上层目录用什么表示?主目录用什么表示? 切换目录用什么命令? 2、怎么查看当前进程?怎么执行退出?怎么查看当前路径? 3、怎么清屏?怎么退出当前命令?怎么执行睡眠?怎么查看当前用户 id?查看指定帮助用什么命令? 4、Ls 命令执行什么功能? 可以带哪些参数,有什么区别? 5、建立软链...

Yangy的博客 1万+

关于字符串的面试题总结

看到关于字符串的面试题总结,第一题我就曾经遇到过- - 摘录于下, 来源: http://rjwyr.blog.163.com/blog/static/112986400201153061911864/ 字符串操作   #include #include #include #include #include using namespace std;

Coding for Dreams 3366

剑指offer系列-面试题67. 把字符串转换成整数 (python)

文章目录1. 题目2. 解题思路3. 代码实现3.14. 总结5. 参考文献 1. 题目 2. 解题思路 3. 代码实现 3.1 4. 总结 5. 参考文献 [1] 剑指offer丛书 [2] 剑指Offer——名企面试官精讲典型编程题

besmarterbestronger的博客 474

python分割字符串中文和英文_Python 面试题大全系列(一)

微信公众号:萝卜大杂烩关注可了解更多的原创内容。问题或建议,请公众号留言或加本人微信;如果你觉得文章对你有帮助,欢迎加微信交流从今天开始,陆续更新一些 Python 相关的面试题,在学习的路上,与君共勉,我的文采好棒哦!基础篇(一)1. 为什么学习 Python(黑人问号)WTF,喜欢学,爱咋咋地。2. 解释型和编译型语言的区别编译型语言:把做好的源程序全部编译成二进制的可运行程序。然后...

weixin_39629467的博客 1752

常见面试题系列1——原地消除字符串连续的空白字符

前两天看到一个文章“白板编程浅谈——Why, What, How”里说“原地消除字符串的重复空白(例:"ab   c  d e" => "ab c d e")则是一道合格的题目,因为即便不使用库函数,合格的面试者也能够在 20 分钟内完成这道题目。” 就试着自己写了下这个功能的实现。   思路:因为题目限制了是原地,而不能借助一个辅助临时数组。所以第一想法可能会想到,从前往后遍历,遇到连续空白就

webary的专栏 422

剑指offer学习(Java)——面试题5:替换字符串中的空格

    题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“We are happy.”,则输出“We%20are%20happy.”。这题思路也很清晰,字符串,字符数组,或者其他的数组,涉及到大量移动的时候就从屁股开始牛客练习连接:替换空格代码如下:public class Solution { public String replaceSpace(StringBuff...

菜鸟修仙记 223

字符串操作——面试题总结

摘录于下, 来源: http://rjwyr.blog.163.com/blog/static/112986400201153061911864/ 字符串操作   #include #include #include #include #include using namespace std; /*\ 1.翻转句子中的单词 题目:输入一个英文句子,翻转

小熊不去实验室 2760

面试必备,Linux面试题和答案!

答案:du 显示目录或文件的大小df 显示每个所在的文件系统的信息,默认是显示所有文件系统。(文件系统分配其中的一些磁盘块用来记录它自身的一些数据,如 i 节点,磁盘分布图,间接块,超级块等。这些数据对大多数用户级的程序来说是不可见的,通常称为 Meta Data。) du 命令是用户级的程序,它不考虑 Meta Data,而 df命令则查看文件系统的磁盘分配图并考虑 Meta Data。df 命令获得真正的文件系统数据,而 du 命令只查看文件系统的部分情况。

人生不怕起点低,就怕没追求 1万+
上一篇: 字符串面试题系列之四:字符串匹配
下一篇: 字符串面试题系列之六:在字符串中删除特定的字符
程序员2
博客等级 码龄15年 6粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值