程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 用C語言來分割字符串,C語言分割字符串

用C語言來分割字符串,C語言分割字符串

編輯:關於C語言

用C語言來分割字符串,C語言分割字符串


#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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved