2

我有这样的文字:

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

4

3 回答 3

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;
}
于 2013-04-13T18:00:16.817 回答
0

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

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

于 2013-04-13T17:30:33.830 回答
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;
}
于 2013-04-13T18:28:02.767 回答