C程序从字符串数组中提取不同的子字符串
我想从包含字符串数组的文件中提取不同的子字符串。 我的文件类似于此。
abcdxxx efghijkyyy lmzzz ncdslanclsppp kdfmsqqq cbskdnsrrr
从上面的文件我想提取xxx,yyy,zzz,ppp,qqq,rrr(基本上是最后3个字符)并存储到数组中。 我提到这个链接如何从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; }
我文件中的内容是动态的,可能会在下次执行时更改
然后你需要realloc
或链表:
#include #include #include 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 #include #include 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; }