Chinaunix

标题: 关于C去空格的函数,高手请指教! [打印本页]

作者: ann_anny    时间: 2003-07-22 22:03
标题: 关于C去空格的函数,高手请指教!
这是我编我的一个去前后格的函数,
    # include <stdio.h>;
# include <string.h>;
void trim(char *ss){
char *p;
int d;
p=ss;
while(*p==' '){
*p=*(p+1);
  p++;
}
d=strlen(p);
while(*(p+d-1)==' '){
   *(p+d-1)='\0';
    d--;
}
  return p;
}
我想编个去C全部空格的函数,怎么也编不出,望高手指点一下.多谢,感激万分!!!!
作者: 大菠萝    时间: 2003-07-22 22:30
标题: 关于C去空格的函数,高手请指教!
将字符串看做是由' '分段的字符串段,先得到每段的头和长度,
在 memcpy到一个新的字符串上,删除旧字符串,返回新字符串。
作者: ann_anny    时间: 2003-07-22 22:37
标题: 关于C去空格的函数,高手请指教!
memcpy怎么用呀,没用过,不会,只知道有个MEMSET,不好意思,
还有,照你说的方法,我还是要先去前后空格,我想一次全部去掉,怎么写呀,
我想有指针传出来.能不能写一个让我看一下,谢谢!
作者: boczjf    时间: 2003-07-22 22:38
标题: 关于C去空格的函数,高手请指教!
# include <stdio.h>;
# include <string.h>;
void trim(char *ss){
char p[256];
int i,j=0;

strcpy( p, ss );
memset( ss, 0x00, strlen(ss));
for(i=0; i<strlen(p)+1; i++)
      if( p != ' ') ss[j++]=p;

return;
}
作者: 1122331    时间: 2003-07-22 22:41
标题: 关于C去空格的函数,高手请指教!


  1. #include <string.h>;
  2. // ConCate plain strings
  3. char *ccstr( char *str)
  4. {
  5.     char *tok = " ", p;

  6.     p = strtok( str, tok );
  7.     while( p != NULL )
  8.     {
  9.           if( p != str )
  10.                strcat( str, p );
  11.           p = strtok( NULL, tok );
  12.     }
  13.     return( str );
  14. }

复制代码

作者: ann_anny    时间: 2003-07-22 22:41
标题: 关于C去空格的函数,高手请指教!
我不想用定长的字符数组,这样大了,浪费资源,小了可能会不够,我想用指针.
如果用字符数组,我做出来.
作者: 1122331    时间: 2003-07-22 22:46
标题: 关于C去空格的函数,高手请指教!
原帖由 "boczjf" 发表:
return;
}
   

这样的是不可取的。
作者: 大菠萝    时间: 2003-07-22 22:48
标题: 关于C去空格的函数,高手请指教!
#include <string.h>;
// ConCate plain strings
char *ccstr( char *str)
{
    char *tok = " ", p;

    p = strtok( str, tok );
    while( p != NULL )
    {
          if( p != str )
               strcat( str, p );
          p = strtok( NULL, tok );
    }
    return( str );
}


这样好,不费内存
作者: ann_anny    时间: 2003-07-22 22:57
标题: 关于C去空格的函数,高手请指教!
strtok是什么呀,我不知道,能不能讲一下呀
还有memcpy,
麻烦,说一下,谢谢
作者: li2002    时间: 2003-07-23 07:42
标题: 关于C去空格的函数,高手请指教!
#include <string.h>;
// ConCate plain strings
char *ccstr( char *str)
{
    char *tok = " ", p;

    p = strtok( str, tok );
    while( p != NULL )
    {
          if( p != str )
               strcat( str, p );
          p = strtok( NULL, tok );
    }
    return( str );
}
}
   

这个方法好!不过
   
  1. char *tok = " ", p;
复制代码

应该是:
   
  1. char *tok = " ", *p;
复制代码

作者: 大菠萝    时间: 2003-07-23 09:42
标题: 关于C去空格的函数,高手请指教!
上面的方法还是费内存的。
可以开辟一个对于同一个功能的静态缓冲区,用加锁的方式来专门做这样的工作,如果当用到的时候,如果有锁,或者是缓冲区不够的话,那自己在函数中自己分配,如果没有缩,且缓冲区够的话,那就用这个缓冲区来,加上锁,用完了,在解锁。
其实去' '不需要什么好的算法,多用内存,速度快,且算法简单,现在有了静态缓冲区,我想怎么用,就很简单了。(用内存是一个高效的方法,在这个问题上,如果用内存比你设计什么好的算法都管用)。
作者: 1122331    时间: 2003-07-23 16:04
标题: 关于C去空格的函数,高手请指教!
[quote]原帖由 "li2002"][/quote 发表:
     

是啊,是啊

顺手写来的,没有验证过
人嘛,本来就是容易犯错误的,是不




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2