我想从包含字符串数组的文件中提取不同的子字符串。我的文件类似于此。
abcdxxx
efghijkyyy
lmzzz
ncdslanclsppp
kdfmsqqq
cbskdnsrrr
从上面的文件中我想提取xxx,yyy,zzz,ppp,qqq,rrr(基本上是最后3个字符)并存储到数组中。我提到这个链接How to extract a substring from a string in C?但感觉不可行,因为我的文件中的内容是动态的,可能会因下次执行而改变。有人能简单介绍一下吗? 这是我的方法
FILE* fp1 = fopen("test.txt","r");
if(fp1 == NULL)
{
printf("Failed to open file\n");
return 1;
}
char array[100];
while(fscanf(fp1,"%[^\n]",array)!=NULL);
for(i=1;i<=6;i++)
{
array[i] += 4;
}
答案 0 :(得分:1)
我文件中的内容是动态的,可能会因下次执行而改变
然后您需要realloc
或链接列表:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
FILE *f;
char **arr = NULL;
char s[100];
size_t i, n = 0;
f = fopen("text.txt", "r");
if (f == NULL) {
perror("fopen");
exit(EXIT_FAILURE);
}
while (fgets(s, sizeof s, f) != NULL) {
arr = realloc(arr, sizeof(*arr) * (n + 1));
arr[n] = calloc(4, 1);
memcpy(arr[n++], s + strlen(s) - 4, 3);
}
fclose(f);
for (i = 0; i < n; i++) {
printf("%s\n", arr[i]);
free(arr[i]);
}
free(arr);
return 0;
}
输出:
xxx
yyy
zzz
ppp
qqq
rrr
如果你总是想要最后3个字符,你可以简化:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
FILE *f;
char (*arr)[4] = NULL;
char s[100];
size_t i, n = 0;
f = fopen("text.txt", "r");
if (f == NULL) {
perror("fopen");
exit(EXIT_FAILURE);
}
while (fgets(s, sizeof s, f) != NULL) {
arr = realloc(arr, sizeof(*arr) * (n + 1));
memcpy(arr[n], s + strlen(s) - 4, 3);
arr[n++][3] = '\0';
}
fclose(f);
for (i = 0; i < n; i++) {
printf("%s\n", arr[i]);
}
free(arr);
return 0;
}