如何从文本文件中读取字符串中的每个单词

Dap*_*ack 0 c

我的代码如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    FILE *fp = fopen("text.txt", "r");
    char c;
    int d = 0;
    char arr[2000];

    do {
        c = fgetc(fp);
        d = d + 1;

        if (c == '\n') {
            arr[d] = ' ';
        } else
            arr[d] = c;
    } while (c != EOF);

    int z = strlen(arr);
    arr[0]= '\0';

    for (int i = 0;i < z; i++) {
        arr[i] = arr[i +1];
    }

    fclose(fp);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

代码从文本文件中读取一个字符串,然后将它们转换为数组arr [2000](文本文件中有很多单词).我想询问是否有人知道代码读取文本文件的方法,每个单词由空格而不是字符分隔.

所以例如,如果我有一个带字符串的数组arr:"杰克是个男孩"

arr [0]等于"杰克"而不是"J"

ps(最后删除索引0的for循环的原因是因为我不断得到一个"("字符在数组的开头)

任何帮助将非常感激.

R S*_*ahu 6

你说:

所以例如,如果我有一个带字符串的数组arr: "Jack is a boy"

arr[0]就等于"Jack""J"

要做到这一点,arr[0]需要是一个指向空终止字符串的指针.这意味着,arr必须是一个指针数组,而不是一个chars 数组.

char* arr[SOME_SIZE] = {0}; // Make SOME_SIZE large enough for your needs.
Run Code Online (Sandbox Code Playgroud)

现在你必须找出存储从文件中读取的字符的位置.您可以使用最简单方式使用的方法在C中获取文件内容以读取文件的全部内容.假设你有代码来读取文件的内容,那么你有:

char* fileContents = readFileContents("text.txt");
Run Code Online (Sandbox Code Playgroud)

而现在,fileContents指向一个看起来像这样的数组:

+---+---+---+---+---+---+---+---+---+---+---+---+---+----+
| J | a | c | k |   | i | s |   | a |   | b | o | y | \0 |
+---+---+---+---+---+---+---+---+---+---+---+---+---+----+
Run Code Online (Sandbox Code Playgroud)

现在,您需要遍历该数组并确保:

  1. arr[0]- arr[3]指向数组中的正确位置.
  2. 空白字符由空字符替换,以便arr[0]- arr[3]指向以空字符结尾的字符串.
arr[0]              arr[1]       arr[2]   arr[3]
|                    |            |        |
v                    v            v        v
+---+---+---+---+----+---+---+----+---+----+---+---+---+----+
| J | a | c | k | \0 | i | s | \0 | a | \0 | b | o | y | \0 |
+---+---+---+---+----+---+---+----+---+-- -+---+---+---+----+
Run Code Online (Sandbox Code Playgroud)

我希望能为您提供足够的信息来实现您所需的功能.