在C中逐行阅读文件并将每行中的每个单词插入链表

gk7wooem  于 2023-05-22  发布在  其他
关注(0)|答案(1)|浏览(89)

我有一个文本文件,里面有很多行和字符串数据,也就是说,我不知道有多少行,每行有多少个单词。
所以,我决定动态地做所有事情。我有一个2D链表,例如:

struct Node
    {
      char word[50];
      struct Node* words;
      struct Node* next;
    }

我的清单:

Node -> Node("something") -> Node("something") //length is random
 |
 v
Node -> Node("something") -> Node("something") -> Node("something") //length is random
  .
  .
  .

我的问题是解析文件。当我使用while( fscanf(file, "%s", word) == 1 )时,它在不检查行尾的情况下获取单词。当我想使用fgets(line, sizeof(line), file)时,我需要指定行的大小,但我不知道行的大小。我的目的是从一行插入单词,直到该行的末尾,然后我将创建另一个节点,我将从该行插入单词到新节点,依此类推。
如何解析我的文件?还有其他功能吗?

bz4sfanl

bz4sfanl1#

您可以使用strtok将每行拆分为单独的单词。只要记住strcpy每个字从strtok因为它不做一个副本,而是编辑缓冲区和指针操作引用不同部分的缓冲区。

> Buffer == "Hello there, how are you"

> word = strtok(Buffer, " ")

> Buffer == "Hello\0there, how are you" && word == &Buffer[0]

> word = strtok(NULL, " ")

> Buffer == "Hello\0there,\0how are you" && word == &Buffer[6]

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

int main()
{
    FILE* in = fopen("myFile.txt", "r");
    
    char* buffer;
    char* word;
    size_t buffer_size = 0;
    
    getline(&buffer, &buffer_size, in);
    
    
    puts("The words from the first line are:");
    word = strtok(buffer, " ");
    while(word != NULL) {
        puts(word);
        word = strtok(NULL, " ");
    }

    return 0;
}

下面是相同的程序工作at this site

相关问题