如何将char *拆分为C中的子串?

时间:2013-04-13 17:23:45

标签: c string split char substring

我有这样的文字:

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函数,但它没有正确分割字符串。

3 个答案:

答案 0 :(得分:1)

#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;
}

答案 1 :(得分:0)

strtok()函数适用于单个字符分隔符的 set 。你的目标是用两个字符的分隔符分割,所以strtok()不适合。

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

答案 2 :(得分:0)

基于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;
}