| 
          【原創】C語言版本的explode函數(字符串分割為數組的函數)(單字符分隔符版) | 
        
                
          
            
                         一派掌門 二十級              | 
          
            
            
             
              #include <stdio.h> #include <stdlib.h>
  char **explode(char delimiter, char *pStr) {     int n = 0;     char *pStrStart = pStr;     char **array;     int i, j, len;          if (*pStr != '\0')         n++;     while (*pStr != '\0')     {         if (*pStr == delimiter)             n++;         *pStr++;     }     pStr = pStrStart;          array = (char **)malloc((n + 1) * sizeof(char *));     for (i = 0; i < n; i++)     {         len = 0;         pStrStart = pStr;         while (*pStr != delimiter && *pStr != '\0')         {             len++;             pStr++;         }         pStr = pStrStart;         array[i] = (char *)malloc((len + 1) * sizeof(char));         for (j = 0; j < len; j++)         {             array[i][j] = *pStr;             pStr++;         }         pStr++; // jump over the delimiter         array[i][len] = '\0';     }     array[n] = NULL;     return array; }
  void strarrfree(char **array) {     char **pArray = array;     while (*array != NULL)     {         free(*array);         array++;     }     free(pArray); }
  void strarrprint(char **array) {     while (*array != NULL)     {         puts(*array);         array++;     } }
  int main() {     char *str = "linux,apache,mysql,php,IIS,Microsoft Access,SQL Server";     char **strarr = explode(',', str);     puts("List:");     strarrprint(strarr);     printf("\nThe second string is: %s\n", strarr[1]);     strarrfree(strarr);     return 0; }             
                       | 
        
                
          
            
                         一派掌門 二十級              | 
          
            
            
             
              運行結果: List: linux apache mysql php IIS Microsoft Access SQL Server
  The second string is: apache              
             | 
|
        
                
          
            
                         一派掌門 二十級              | 
          
            
            
             
              補充一個求字符串數組大小的函數(也就是求出一個字符串數組中有多少個字符串): int strarrlen(char **array) {     int len = 0;     while (*array != NULL)     {         len++;         array++;     }     return len; }              
             | 
|
        
                
          
            
                         一派掌門 二十級              | 
          
            
            
             
              空字符串測試: int main() {     char str[] = "";     char **strarr = explode(',', str);     strarrprint(strarr); // nothing done     printf("Array length: %d\n", strarrlen(strarr));     strarrfree(strarr);     return 0; } 輸出: Array length: 0 正常。             
             | 
|
        
                
          
            
                         一派掌門 二十級              | 
          
            
            
             
              單元素測試: int main() {     char str[] = "My Documents";     char **strarr = explode(',', str);     strarrprint(strarr); // nothing done     printf("Array length: %d\n", strarrlen(strarr));     strarrfree(strarr);     return 0; } 輸出: My Documents Array length: 1 正常。              
             | 
|
        
                
          
            
                         一派掌門 二十級              | 
          
            
            
             
              strarrlen和strlen函數的使用: int main() {     char str[] = "Windows,kUbuntu,Fedora,CentOS,ArchLinux,Gentoo";     char **strarr = explode(',', str);     int i, len;     strarrprint(strarr);     printf("\nArray length: %d\n", strarrlen(strarr));     len = strarrlen(strarr);     for (i = 0; i < len; i++)         printf("strlen(\"%s\") = %d\n", strarr[i], strlen(strarr[i]));     strarrfree(strarr);     return 0; } 輸出: Windows kUbuntu Fedora CentOS ArchLinux Gentoo
  Array length: 6 strlen("Windows") = 7 strlen("kUbuntu") = 7 strlen("Fedora") = 6 strlen("CentOS") = 6 strlen("ArchLinux") = 9 strlen("Gentoo") = 6              
             | 
|
        
                
          
            
                         一派掌門 二十級              | 
          
            
            
            
              回復:7樓 注意,使用strlen這個函數需要包含頭文件#include <string.h>
               
             | 
|
        
                
          
            
                         一派掌門 二十級              | 
          
            
            
            
             | 
|