字符串面试题系列之五:删除字符串空格
来源:互联网 发布:mac账户忘记密码 编辑:程序博客网 时间:2024/05/07 13:03
前言
********************************************************************************************************************本系列文章所提供的算法均在以下环境下编译通过。
【算法编译环境】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.csdn.net/hellotime本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
- 字符串面试题系列之五:删除字符串空格
- 常见C语言面试题之四:删除字符串头尾空格,字符串右对齐
- 新浪面试题:删除字符串中多余的空格
- 面试题 -- 字符串替换空格
- 经典面试题---字符串系列(一)---删除字符串
- 字符串面试题系列之六:在字符串中删除特定的字符
- 字符串面试题系列之三:左旋转字符串
- 字符串面试题系列之四:字符串匹配
- 面试100题系列之2字符串删除多余空格
- 面试题之字符串
- 面试题4:替换字符串中的空格
- 面试题4:字符串_空格替换
- c语言去除字符串空格(面试题)
- 字符串面试题系列之二:连续最长数字串
- 面试题 删除字符串开始以及末尾的若干空格,并且把中间多个空格转化为一个
- 笔试面试题之字符串
- 面试题之两个字符串
- [C++面试题]之字符串
- TA-Lib:技术分析库简介
- win7内置administrator帐号和创建administators组中的其他帐号的区别-适用于其他近似架构的windows
- Qt 平常遇到之后自己搜索一些东西的集合(5)
- HDU-4633 poyla计数
- 挑战编程:修路问题 [转]
- 字符串面试题系列之五:删除字符串空格
- mp4文件格式解析(一)
- 基于Zynq的光流法软硬件协同设计与实现
- 工厂方法模式
- const指针的两种形式
- < Linux Kernel > Garbage Collection
- JDOM操作XML
- Three Families
- asp.net 获取系统的根目录