我有一个如下文字文件。我使用fscanf
进行阅读,直至看到"找到",然后将在该行中的所有内容读入数组。这个文本文件只是一个例子,所以我不能硬编码:
text text some words text
text hello text text
text text random text
world
found read1 read2 read3
don't
read any of this
到目前为止,我有以下代码:
char **arr = NULL;
int i = 0;
char var[3000];
FILE *fp = fopen("file.txt", "r");
while(fscanf(fp, "%s", var) != EOF){
if(strcmp(arr[i], "found")==0){
while(fscanf(fp, "%s", var)!=EOF){
if(strcmp(var, "\n")==0){
break;
}
arr = realloc(arr, (i + 1)*sizeof(*arr));
arr[i] = malloc(strlen(var)+1);
strcpy(arr[i++], var);
}
}
}
答案 0 :(得分:1)
如果文字看起来与您描述的完全一致,那么您可以尝试:
char *array[100];
i = 0;
while(fscanf(file, "%s", var) != EOF){
if(strcmp(var, "found") == 0){
while(fscanf(file, "%s", var) != EOF){
if( strcmp(var, "\n") == 0 ) break;
array[i] = (char*)malloc(sizeof(var)*sizeof(char));
strcpy(array[i],var);
i++;
}
}
}
修改强>
由于scanf
忽略空格,因此上述代码无法在换行符处停止。要修复它,您可以使用fgets()
:
while(fgets(var, 3000, stdin) != NULL){
char *checker = strstr(var, "found");
if(checker == var){
size_t ln = strlen(var), start = 0;
for(int j = 0; j< ln; j++)
if(var[j] == ' ' || var[j] == '\n'){
array[i] = (char*)malloc(sizeof(var)*sizeof(char));
strncpy(array[i++], var + start, j - start);
start = j;
while(var[j++] == ' ') start ++;
}
}
}
以上代码经过测试可以正常工作,只需注意它也会在array[0]
中保留“找到”字样。同时使用stdin
对其进行了测试,但在使用stdin
中的文件替换fgets(var, 3000, stdin)
时不会有任何问题。