如何在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;i printf(“数组[%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);}`