- 最後登錄
- 2023-3-4
- 在線時間
- 1 小時
- 註冊時間
- 2008-9-27
- 閱讀權限
- 20
- 精華
- 0
- UID
- 5031647
- 帖子
- 575
- 積分
- 196 點
- 潛水值
- 14681 米
| 寫了一個函數提供參考
因為樓主的做法很有C語言的style
所以我就用C語言來寫了…- /*
- char** StrSplit(const char* src,const char* sep,int *num)
- 函數說明:
- 以sep為關鍵字,將src分割為子字串。
- 引數:
- src:要被切割的字串
- sep:視為分割符號的字串
- num:儲存分割完後共有幾筆資料
- 回傳值:
- char**指標(指向動態宣告位址),或是NULL(src是空字串時)
- ※使用後需要釋放記憶體
- */
- char** StrSplit(const char* src,const char* sep,int *num)
- {
- int srcL,sepL,n,i;
- char *p,**pp;
- const char *t,*q;
- *num=0;
- if((srcL=strlen(src))==0)
- return NULL;
- if(sep==NULL || (sepL=strlen(sep))==0)
- {
- pp=(char**)malloc(srcL+sizeof(char*));
- pp[0]=(char*)(pp+1);
- strcpy(pp[0],src);
- return pp;
- }
- //計算所需空間
- n=0;
- for(t=src;(t=strstr(t,sep))!=NULL;t+=sepL)
- ++n;
- pp=(char**)malloc(srcL-(sepL-1)*n+1+sizeof(char*)*(n+1));
- //寫入數值
- *num=n+1;
- i=0;
- p=(char*)(pp+n+1);
- for(t=src;(q=strstr(t,sep))!=NULL;t=q+sepL)
- {
- pp[i++]=p;
- memcpy(p,t,n=q-t);
- p+=n;
- *(p++)='\0';
- }
- pp[i++]=p;
- strcpy(p,t);
- return pp;
- }
複製代碼 ... |
|