Chinaunix
标题:
trim.c 自认为很高效
[打印本页]
作者:
sulilo
时间:
2012-04-26 18:15
标题:
trim.c 自认为很高效
在抽取网页数据的时候,需要用到trim, 一高兴自己写了个。
设计思路:
1. 如果行首没有' ', '\t', '\r', '\n', 这些字符, 则向后移动到行尾,
2. 如果行首包含以上字符,则使用后面的字符去覆盖前面的字符。
3. 循环完成后,再从后向前清除行尾的字符。
/*
* Trim String
*/
#include <stdio.h>
#include <unistd.h>
#include <string.h>
inline int _trim_isprint(char c)
{
switch (c) {
case ' ':
return 1;
case '\t':
return 1;
case '\r':
return 1;
case '\n':
return 1;
default:
return 0;
}
}
void trim(char *str)
{
char *i;
char *j;
if (str != NULL) {
i = str;
for (j=i; *j; j++) {
if (i == str) {
if (!_trim_isprint(*j)) {
*i++ = *j; /* 找到第一个可打印字符 */
}
} else {
if (i == j) {
i++; /* i, j 在相同的位置, i++ */
} else {
*i++ = *j; /* 复制字符j, 到字符i */
}
}
}
/* 清除行尾的非打印字符 */
if (i != str) {
while (_trim_isprint(*(i-1))) {
i--;
}
}
*i = '\0';
}
}
复制代码
作者:
GFree_Wind
时间:
2012-04-26 21:29
我来拍砖,别的不说。
把i和j当作char *指针来用的,就让人看着别扭。
作者:
enough_zerg
时间:
2012-04-27 10:03
....这个那么多重循环再判断....
作者:
Sevk
时间:
2012-04-27 14:24
提示:
作者被禁止或删除 内容自动屏蔽
作者:
wwwsq
时间:
2012-04-27 15:34
代码风格不够好。八个空格缩进,还缩进那么多层。一下就震惊了。
作者:
雨过白鹭洲
时间:
2012-04-27 16:33
你能trim几个字符串啊,高效不高效有什么用。。
你想想一个程序员每天也就能写几十行代码,就算100行吧,你写了个trim,一天的工作量啊,重复写这个能有什么意思,写一万遍,还能写出个花来?
作者:
放纵思想
时间:
2012-04-27 18:32
void trim( char *str )
{
if ( str == NULL ) return;
char *src = str;
char *begin = NULL, *end = NULL;
for(begin = str; *str==' '; ++str, ++begin)
;
for(end = str; *str; ++str)
if(*str != ' ') end = str;
*(end + 1) = 0;
memmove(src, begin, end-begin+2);
}
作者:
放纵思想
时间:
2012-04-27 18:33
判断空白字符,难道你不知道这个函数吗?
int isspace(int c);
作者:
txdgtwpv
时间:
2012-04-27 19:47
lz用的拼音输入法?
自认为很gaoxiao
----------
| 1. 高效 2.
搞笑
3.高校 |
作者:
nizvoo
时间:
2012-04-28 09:18
:wink::wink::wink::wink:
作者:
251316192
时间:
2012-04-28 09:31
看到你用i, j来标识指针。我都不知道要做什么了。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2