处理空格的就地字符串处理函数的实现
来源:互联网 发布:网络直播平台搭建 编辑:程序博客网 时间:2024/05/01 15:12
处理空格的就地字符串处理函数的实现
by 沈东良 http://blog.csdn.net/shendl
本文介绍处理空格的就地字符串处理函数的实现。就是在字符串内存内进行的字符串操作。不涉及到分配新的内存。
把字符串尾部的空格去掉的函数:
char * cstring_trimTail(char *str){ if(str==NULL){ return NULL; } unsigned int i=0; for(;str[i]!='\0';i++){ ; } //i==length; for(i--;i>=0 && isspace(str[i]);i--){ str[i]='\0'; } return str;}
去掉字符串尾部的空格是最简单的。因为字符串是以'\0'表示字符串的终止的。因此,只需要把尾部的第一个空格找到,然后设置为‘\0’就可以了。
把字符串开头的空格去掉的函数:
char * cstring_trimHead(char *str){ if(str==NULL){ return NULL; } unsigned int i=0; for(;isspace(str[i]);i++){ ; } //i==first unspace char unsigned int newIndex=0; for(;str[i]!='\0';i++,newIndex++){ str[newIndex]=str[i]; } //i==strlen for(;newIndex<i;newIndex++){ str[newIndex]='\0'; } return str;}
把字符串头部的空格去掉,需要移动后面每一个字符串。这个新的字符串的大小<=原来的字符串。因此可以寄生在原来的字符串的内存空间中。
newIndex表示新字符串的尾部。它的头部是0。这样就可以把头部的空格都去除了。并且在O(n)算法复杂度内解决这个问题。
char * cstring_trim(char *str){ if(str==NULL){ return NULL; } str=cstring_trimTail(str); str=cstring_trimHead(str); return str;}
把超过一个连续空格合并为一个空格的字符串处理函数:
int
cstring_exactMoreSpace(char* str) {
inti = 0;
intnewStrNextIndex = 0;
for(i = 0; str[i] != '\0';i++) {
if(
isspace(str[i])
){if(newStrNextIndex!=i){
str[newStrNextIndex]= str[i];
}
newStrNextIndex++;
printf("firstspace,str[%d]:%c\n",i, str[i]);
for(i++;
isspace(str[i])
;i++) {printf("Ignorespace,str[%d]:%c\n",i, str[i]);
}
i--;
}else{
if(newStrNextIndex!=i){
str[newStrNextIndex]= str[i];
}
newStrNextIndex++;
}
}
str[newStrNextIndex]='\0';
printf("%s\n",str);
return0;
}
把字符串中的连续空格合并为一个空格,需要创建一个新的字符串。这个新的字符串的大小<=原来的字符串。因此也可以寄生在原来的字符串的内存空间中。
newStrNextIndex表示新字符串的尾部。它的头部是0。当遇到空格,就在新字符串写入这个空格,并且扫描掉紧根在后面的空格。在O(n)算法复杂度内解决这个问题。
小结
这几个函数是就地字符串处理函数,节约了内存空间。
要注意,C中的常量字符串在常量区分配,该内存区域是只读的,如果试图修改该内存区域的数据,会引发段错误,进程崩溃。因此,它们的参数不能是常量字符串。
这些函数的核心算法思想是,构建一个新的字符串,这个字符串寄生在原来的字符串的内存空间中。
只要有了“构建新的字符串”的思路,就能够很容易地理解上述函数实现。
- 处理空格的就地字符串处理函数的实现
- 字符串空格的处理
- 字符串处理函数的实现
- 字符串处理函数的实现
- 字符串处理函数的实现
- js处理空格的函数
- C字符串处理函数的实现
- C字符串处理函数的实现
- C字符串处理函数的实现
- C字符串处理函数的实现
- C 语言 字符串处理函数的实现
- 字符串处理函数的实现及注意事项
- 一些字符串处理函数的实现
- 字符串处理函数的编程实现
- C语言字符串处理函数的实现
- 一些字符串处理函数的实现!
- 处理字符串的函数
- asp 截取字符串中空格的处理
- 网络编程——cli.c
- 开源许可证
- sdk manage 更新与安装
- Handler的使用(一)
- 薄荷花开
- 处理空格的就地字符串处理函数的实现
- JavaScript中的匿名函数及函数的闭包
- 山区行
- 关于std::sort中的比较函数使用时的严格弱排序(strict weak order)
- jpanel的一些事
- 小宝,小宝,我爱你
- 用cobar搭建分布式数据库
- 我指间的刺青是对你的誓言
- poj 1717 Dominoes