|
藍森林 http://www.lslnet.com 2006年6月6日 10:18
刪除一個有許多空格和TAB分割的字符串中空格和TAB的函數
我以前在回帖子中寫過,但找不到了。
char buf[MAXSIZE];
char *delsp(char *s)
{
char *cp;
for(*buf = 0; ; s = NULL) {
if(!(cp = strtok(s, " \t"))) break;
strcat(buf, cp);
}
return buf;
} |
刪除一個有許多空格和TAB分割的字符串中空格和TAB的函數
有個前輩告訴我,在有些追求速度的場合,一味的調用庫函數也不一定是最合適的。 |
刪除一個有許多空格和TAB分割的字符串中空格和TAB的函數
一般來講,調用庫函數的速度快。
strcpy(), strtok(), memcpy()等內部的指令是用彙編優化的。如strcpy()
是用機器碼的REPZ MOVSW, MOVSB等,非常快。尤其是比象
while(cp)
*dp++ = *cp++; //一個一個地做。慢
等快多了。 |
刪除一個有許多空格和TAB分割的字符串中空格和TAB的函數
do not use strtok, it has already been replaced by strsep |
刪除一個有許多空格和TAB分割的字符串中空格和TAB的函數
用strtok的話,在多線程環境下很有可能會出錯,因為此函數的一般實現採用了一個靜態數據區,是不可重入的。
--> |
刪除一個有許多空格和TAB分割的字符串中空格和TAB的函數
老兄! 有strtok的源代碼嗎?
我習慣了些那種一個字符一個字符比的程序,我是初學者!
想下面的這個:
char *get_str(char *ptr,char *g_str,char c)
{
char ls_buf[256];
int i,j,k;
j=0;
i=strlen(ptr);
while(j<i)
{
if(ptr[j]!=c)
j++;
else
break;
}
if(j==0)
strcpy(g_str,"");
else
strncpy(g_str,ptr,j);
g_str[j]=0;
memset(ls_buf,'\0',sizeof(ls_buf));
strcpy(ls_buf,ptr+j+1);
ls_buf[strlen(ls_buf)]=0;
memset(ptr,'\0',sizeof(ptr));
strcpy(ptr,ls_buf);
ptr[strlen(ptr)]=0;
return ptr;
}
我知道這樣很慢! |
刪除一個有許多空格和TAB分割的字符串中空格和TAB的函數
strtok()是不可重新進入. 可以自己封鎖以下, 幹完後在開開.
strsep()也好用.
關於效率, 調用strcpy()比自己
while(*sp)
*dp++ = *sp++;
快的太多了. 因為一般CPU都有數據塊指令, strXXX()許多都用. |
刪除一個有許多空格和TAB分割的字符串中空格和TAB的函數
-->
呵呵!兄弟太過執著。 |
刪除一個有許多空格和TAB分割的字符串中空格和TAB的函數
我感覺這個成序葉挺快的, 比較靈活的! 但我鄉找一些更快一點,保險一點,再靈活一點的!
謝謝! |
刪除一個有許多空格和TAB分割的字符串中空格和TAB的函數
... |
| |