编译环境
本系列文章所提供的算法均在以下环境下编译通过。
【算法编译环境】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指针控制输出开始为0,j指针从0处开始扫描;
第二步:左边空格:当j遇见第一个不是空格的字符,赋给i处.i指向下一位;
第三步:中间以及后面空格:继续扫描,如果遇见空格则赋给i处,i指向下一位,后面空格就忽略直到下一个不是空格字符赋给i处,i指向下一位。
第四步:给字符串加一个'\0'并且返回。算法结束。
【代码】
#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; }
【结论】
作者
出处:http://www.cnblogs.com/gina
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。