我有這樣的文字:如何將char *分割爲C中的子字符串?
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函數,但它不能正確分割字符串。
我有這樣的文字:如何將char *分割爲C中的子字符串?
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函數,但它不能正確分割字符串。
基於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;
}
的的strtok()函數工作在一個設置單個字符定界符的。你的目標是分割兩個字符的分隔符,所以strtok()並不適合。
你可以通過一個循環,使用,和strchr找換行,然後檢查,看看是否下一個字符也換行掃描輸入字符串。
#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;
}
謝謝!這就是我要的。我得到的文本形式與該文件: '\t如果(FILEREAD) \t { \t \t FSEEK(FILEREAD,0,SEEK_END); \t \t length = ftell(fileRead); \t \t fseek(fileRead,0,SEEK_SET); \t \t buffer = malloc(length); \t \t如果(緩衝液) \t \t { \t \t \t的fread(緩衝液,1,長度,FILEREAD); \t \t} \t \t FCLOSE(FILEREAD); \t}' –
你可以做一個子不循環,如果你提前知道時間的指標。你如何獲得文本?下面是一個例子:http://stackoverflow.com/questions/4214314/get-a-substring-of-a-char –