【问题标题】:How can I split a char* into substrings in C?如何在 C 中将 char* 拆分为子字符串?
【发布时间】:2013-04-06 02:54:36
【问题描述】:

我有这样的文字:

char* str="Hi all.\nMy name is Matteo.\n\nHow are you?"

我想将字符串按“\n\n”拆分成这样的数组:

char* array[3];
array[0]="Hi all.\nMy name is Matteo."
array[1]="How are you?"
array[2]=NULL

我尝试了 strtok 函数,但它没有正确拆分字符串。

【问题讨论】:

    标签: c string split char substring


    【解决方案1】:

    strtok() 函数适用于单个字符分隔符的。您的目标是用两个字符分隔符分割,因此 strtok() 不适合。

    您可以通过循环扫描您的输入字符串,该循环使用 strchr 查找换行符,然后检查下一个字符是否也是换行符。

    【讨论】:

    【解决方案2】:
    #include <stdio.h>
    #include <string.h>
    
    int main(){
        char *str="Hi all.\nMy name is Matteo.\n\nHow are you?";
        char *array[3];
        char *ptop, *pend;
        char wk[1024];//char *wk=malloc(sizeof(char)*(strlen(str)+3));
        int i, size = sizeof(array)/sizeof(char*);
    /*
    array[0]="Hi all.\nMy name is Matteo."
    array[1]="How are you?"
    array[2]=NULL
    */
        strcpy(wk, str);
        strcat(wk, "\n\n");
        for(i=0, ptop=wk;i<size;++i){
            if(NULL!=(pend=strstr(ptop, "\n\n"))){
                *pend='\0';
                array[i]=strdup(ptop);
                ptop=pend+2;
            } else {
                array[i]=NULL;
                break;
            }
        }
        for(i = 0;i<size;++i)
            printf("array[%d]=\"%s\"\n", i, array[i]);
        return 0;
    }
    

    【讨论】:

    • 谢谢!这就是我要的。我得到一个文件的文本:` if (fileRead) { fseek (fileRead, 0, SEEK_END);长度 = ftell (fileRead); fseek (fileRead, 0, SEEK_SET);缓冲区 = malloc(长度); if (buffer) { fread (buffer, 1, length, fileRead); } fclose(文件读取); }`
    【解决方案3】:

    基于strstr函数的更通用的方法:

    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    
    int main(void) {
        char* str="Hi all.\nMy name is Matteo.\n\nHow are you?\n\nThanks";
        char **result = NULL;
        unsigned int index = 0;
        unsigned int i = 0;
        size_t size = 0;
        char *ptr, *pstr;
        ptr = NULL;
        pstr = str;
    
        while(pstr) {
            ptr = strstr(pstr, "\n\n");
            result = realloc(result, (index + 1) * sizeof(char *));
            size = strlen(pstr) - ((ptr)?strlen(ptr):0);
            result[index] = malloc(size * sizeof(char));
            strncpy(result[index], pstr, size);
            index++;
            if(ptr) {
                pstr = ptr + 2;
            } else {
                pstr = NULL;
            }
        } ;
    
        for(i = 0; i < index; i++) {
            printf("Array[%d] : >%s<\n", i, result[i]);
        }
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      • 2014-09-26
      • 2015-01-16
      • 1970-01-01
      相关资源
      最近更新 更多