相關:http://www.cnblogs.com/roucheng/p/cfenge.html ...
#include <stdio.h> int main() { char str1[10] = {0}; char str2[10] = {0}; char str3[10] = {0}; sscanf("1,2,3#3,4#4,5","%[^#]#%[^#]#%[^#]", str1, str2,str3); printf("The split result is:\n%s\n%s\n%s\n",str1, str2,str3); return 0; } /* 何問起 hovertree.com */
//[C語言]字元串處理 - 以指定的字元串分割字元串(支持中文字元) //2008-11-8: 函數StringSplit(分割字元串到一個字元串數組中,其中該數組第0位為分割後字元串的個數) //2008-11-10: 函數StringSplit_Struct(以定義一個新結構的方式來實現該函數) /*C代碼如下*/ #include <stdio.h> /*實現方案1*/ /* 何問起 hovertree.com */ /*分割字元串到一個字元串數組中,其中該數組第一位為分割後的個數*/ char** StringSplit(const char* string,const char* split) { char** result; /*首先分配一個char*的記憶體,然後再動態分配剩下的記憶體*/ result = (char * * )malloc(sizeof(char *)*1); memset(result,0,sizeof(char *)*1); /*定義一個遍歷用的指針和一個尋找位置用的指針*/ char* p = string; char* pos = string; /*無論是否存在該分割串,絕對都會分割到一個字元串*/ int count = 1; while(*p != '\0') { char* temp; char* tt; /*查找該字元串*/ pos = strstr(p,split); /*結果為0說明剩下的字元串中沒有該字元了*/ if(pos == 0) { result = (char * * )realloc(result,sizeof(char *)*(count+2)); result[0] = count; result[count] = p; result[count+1] = NULL; return result; } /*分配臨時字元串空間*/ temp = (char * )malloc(sizeof(char)*(pos - p+1)); memset(temp,0,sizeof(char)*(pos - p+1)); /*設置頭指針,以便賦值時使用*/ tt = temp; while(p<=pos) { *temp++ = *p++; } /*將字元串結尾置零*/ *--temp = '\0'; result = (char * * )realloc(result,sizeof(char *)*(count+1)); result[0] = count; result[count] = tt; count++; /*設置下一次遍歷時的指針(重要)。當split長度大於1時,不這樣設置會多賦值不必要的字元串*/ p +=strlen(split)-1; } return result; } /*實現方案2*/ /* 何問起 hovertree.com */ /*為方便計數定義的結構,字元串數組從0開始賦值*/ typedef struct{ int number; /*分割的字元串個數*/ char** string; /*字元串數組*/ }StringTab; /*分割字元串到一個字元串數組中*/ StringTab StringSplit_Struct(const char* string,const char* split) { StringTab result; /*首先分配一個char*的記憶體,然後再動態分配剩下的記憶體*/ result.string = (char * * )malloc(sizeof(char *)*1); memset(result.string,0,sizeof(char *)*1); /*無論是否存在該分割串,絕對都會分割到一個字元串*/ result.number = 0; /*定義一個遍歷用的指針和一個尋找位置用的指針*/ char* p = string; char* pos = string; while(*p != '\0') { char* temp; char* tt; /*查找該字元串*/ pos = strstr(p,split); /*結果為0說明剩下的字元串中沒有該字元了*/ if(pos == 0) { result.string = (char * * )realloc(result.string,sizeof(char *)*(result.number+1)); result.string[result.number] = p; return result; } /*分配臨時字元串空間*/ temp = (char * )malloc(sizeof(char)*(pos - p+1)); memset(temp,0,sizeof(char)*(pos - p+1)); /*設置頭指針,以便賦值時使用*/ tt = temp; while(p<=pos) { *temp++ = *p++; } /*將字元串結尾置零*/ *--temp = '\0'; result.string = (char * * )realloc(result.string,sizeof(char *)*(result.number+1)); result.string[result.number] = tt; /*計數器加一*/ result.number++; /*設置下一次遍歷時的指針(重要)。當split長度大於1時,不這樣設置會多賦值不必要的字元串*/ p +=strlen(split)-1; } return result; } int main() { /*進行測試*/ /* 何問起 hovertree.com */ /*方案1測試*/ char** array; array = StringSplit("a/aaa//哈aa","aaa"); int i ; for(i=1;i<=(int)array[0];i++) { printf("Num:%d I:%d: Value: %s\n",array[0],i,array[i]); } array = StringSplit("a/aa哈a//哈aa","哈"); for(i=1;i<=(int)array[0];i++) { printf("Num:%d I:%d: Value: %s\n",array[0],i,array[i]); } /*方案2測試*/ StringTab array2; array2 = StringSplit_Struct("a/aaa//哈aa","aaa"); for(i=0;i<=array2.number;i++) { printf("Num:%d I:%d: Value: %s\n",array2.number,i,array2.string[i]); } array2 = StringSplit_Struct("a/aa哈a//哈aa","哈"); for(i=0;i<=array2.number;i++) { printf("Num:%d I:%d: Value: %s\n",array2.number,i,array2.string[i]); } return 0; }
相關:http://www.cnblogs.com/roucheng/p/cfenge.html