Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中将char*拆分为子字符串?_C_String_Split_Char_Substring - Fatal编程技术网

如何在C中将char*拆分为子字符串?

如何在C中将char*拆分为子字符串?,c,string,split,char,substring,C,String,Split,Char,Substring,我有这样一个文本: char* str="Hi all.\nMy name is Matteo.\n\nHow are you?" char* array[3]; array[0]="Hi all.\nMy name is Matteo." array[1]="How are you?" array[2]=NULL 我想用“\n\n”将字符串拆分为如下数组: char* str="Hi all.\nMy name is Matteo.\n\nHow are you?" char* arra

我有这样一个文本:

char* str="Hi all.\nMy name is Matteo.\n\nHow are you?"
char* array[3];
array[0]="Hi all.\nMy name is Matteo."
array[1]="How are you?"
array[2]=NULL
我想用“\n\n”将字符串拆分为如下数组:

char* str="Hi all.\nMy name is Matteo.\n\nHow are you?"
char* array[3];
array[0]="Hi all.\nMy name is Matteo."
array[1]="How are you?"
array[2]=NULL
我尝试了strtok函数,但它没有正确分割字符串。

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

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

\include
#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;
}
#包括 int main(){ char*str=“大家好。\n我的名字是Matteo。\n\n你们好吗?”; 字符*数组[3]; 字符*ptop,*pend; char wk[1024];//char*wk=malloc(sizeof(char)*(strlen(str)+3)); int i,size=sizeof(数组)/sizeof(字符*); /* 数组[0]=“您好。\n我的名字是Matteo。” 数组[1]=“你好吗?” 数组[2]=NULL */ strcpy(wk,str); strcat(wk,“\n\n”);
对于(i=0,ptop=wk;i基于
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;
}
#包括
#包括
#包括
内部主(空){
char*str=“大家好。\n我的名字是Matteo。\n\n您是谁?\n\n银行”;
字符**结果=空;
无符号整数索引=0;
无符号整数i=0;
大小\u t大小=0;
字符*ptr,*pstr;
ptr=NULL;
pstr=str;
while(pstr){
ptr=strstrstr(pstr,“\n\n”);
结果=realloc(结果,(索引+1)*大小(字符*);
大小=strlen(pstr)-(ptr)→strlen(ptr):0;
结果[索引]=malloc(大小*sizeof(字符));
strncpy(结果[索引]、pstr、大小);
索引++;
如果(ptr){
pstr=ptr+2;
}否则{
pstr=NULL;
}
} ;
对于(i=0;iprintf(“数组[%d]:>%s如果你提前知道索引,你就可以做一个无循环的子字符串。你是如何得到文本的?下面是一个例子:谢谢!这就是我想要的。我要用以下命令将文本形成一个文件:`if(fileRead){fseek(fileRead,0,SEEK_END);length=ftell(fileRead);fseek(fileRead,0,SEEK_SET);buffer=malloc(长度);if(buffer){fread(buffer,1,length,fileRead);}fclose(fileRead);}`