您的位置:首页 > 其它

删除字符串开始及末尾的空白符,并且把数组中间的多个空格(如果有)符转化为1个。

2012-09-14 10:17 519 查看
删除字符串开始及末尾的空白符,并且把数组中间的多个空格(如果有)符转化为1个。

写的不是很简洁,有好几处需要特别注意的地方

方法:2个指针,space指向第一个空格,letter指向space之后的第一个字母,然后把letter指向的字母复制到space指向的空格。

这里要注意几个地方:

1. 因为2个单词之间要空一个空格,所以复制之前要space++,不然一个空格都没有了

2. 如上面所说,如果这个字符串是空格打头,那么只要说最后的字符串会多一个空格打头,所以我在前面加了个flag判断字符串是不是空格打头

3. 在复制*letter到*space的时候,也要把letter置为空格,不然她的内容还在哪里。

总之这个代码写的一般般,总的复杂度会比O(n)稍高,按说O(n)是可以解决的,但是本人水平限制,所以.....

求O(n)代码分享

#include "stdafx.h"
#include<iostream>
using namespace std;

void switcher(char *str)
{
char *letter = NULL;//指向字母
char *space = NULL;//指向空格
bool flag = true;
letter = space = str;

if(*str == ' ')//防止空格打头,去掉试试你就知道为什么了
flag = false;
while(*letter!='\0')
{
while(*space != ' '&& *space!='\0')//找到第一个空格
{
space++;
}
letter = space;
while(*letter == ' '&& *letter != '\0')//找到这个空格后的第一个字母
{
letter++;
}
if(*letter == '\0')//如果这个空格后没有字母,那么space就是字符串的结尾
{
*space = '\0';
return;
}
if(flag)
space++;//如果有字母,那么这2个字母串中间至少要有一个空格
while(*letter != ' '&& *letter != '\0')
{
*space = *letter;
*letter = ' '; //最后一个作用很大哦,去掉试试你就知道了
space++;
letter++;
}
flag = true;
}

}
int main()
{
char a[] = "hello    world    baby   ggg";
switcher(a);
cout<<a<<endl;
getchar();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐