删除字符串开始及末尾的空白符,并且把数组中间的多个空格(如果有)符转化为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)代码分享
写的不是很简洁,有好几处需要特别注意的地方
方法: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; }
相关文章推荐
- 删除字符串开始及末尾的空白符,并且把数组中间的多个空格(如果有)符转化为1个。
- 删除字符串开始及末尾的空白符,并且把数组中间的多个空格(如果有)符转化为1个。
- 删除字符串开始及末尾的空白符,并且把数组中间的多个空格(如果有)符转化为1个
- 删除字符串开始及末尾的空白符,并且把数组中间的多个空格(如果有)符转化为1个
- 删除字符串开始及末尾的空白符,并且把数组中间的多个空格(如果有)符转化(合并)为1个
- 删除字符串开始及末尾的空白符,并且把数组中间的多个空格(如果有)符转化为1个
- 删除字符串开始及末尾的空白符,并且把数组中间的多个空格(如果有)符转化为1个
- 删除字符串开始及末尾的空白符,并且把数组中间的多个空格(如果有)符转化为1个。
- 删除字符串开始及末尾的空白符,并且把数组中间的多个空格(如果有)符转化为1个。
- 删除字符串开始及末尾的空白符,并且把数组中间的多个空格(如果有)
- 字符串 删除字符串开始以及末尾的空白符,并把数组中间的多个空格(如果有)符转换为1个
- 删除字符串开始及末尾的空格,并且把数组中间的多个空格转化为一个
- 面试题 删除字符串开始以及末尾的若干空格,并且把中间多个空格转化为一个
- 给定字符串(ASCII码0-255)数组,请在不开辟额外空间的情况下删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。
- 给定字符串(ASCII码0-255)数组,请在不开辟额外空间的情况下删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。例如:" i am a little boy.
- [删除字符串中多余的空格]给定字符串,删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个
- 删除字符串开始和结尾空格,并将中间多个空格合并为一个空格
- 删除字符串中多余的空格]给定字符串,删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个
- 给定字符串,删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个
- 给定字符串,删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个