c语言编程笔录

您现在的位置是:首页 >   > 

杨路明c语言 第三版

郑伊雯 2023-09-19
问题:设计一个程序,统计一个文本文件中每个单词出现的次数解答:首先,我们需要了解问题的需求。给定一个文本文件,我们需要编写一个程序来统计每个单词在文件中出现的次数。对于出现多次的单词,我们需要准确计算它们的出现次数,并显示在程序

问题:设计一个程序, 统计一个文本文件中每个单词出现的次数

解答:

首先,我们需要了解问题的需求。给定一个文本文件,我们需要编写一个程序来统计每个单词在文件中出现的次数。对于出现多次的单词,我们需要准确计算它们的出现次数,并显示在程序的输出中。

其次,我们需要设计程序的算法。我们可以采用哈希表这样的数据结构来记录每个单词和它们的出现次数。我们可以遍历文件中的每个单词,并将其加入哈希表中。如果该单词已经存在于哈希表中,我们增加它对应的计数。如果该单词没有出现过,我们将其加入哈希表,并将计数设置为1。

现在,让我们来编写代码来实现上述算法:

#include 
#include 
#include 
#include 
#include 

#define MAX_WORD_LENGTH 100
#define INITIAL_CAPACITY 100

typedef struct {
    char *word;
    int count;
} WordCount;

int main() {
    FILE *file = fopen("input.txt", "r");
    if (file == NULL) {
        printf("无法打开文件!\n");
        return 1;
    }
  
    WordCount *wordCounts = malloc(INITIAL_CAPACITY * sizeof(WordCount));
    int capacity = INITIAL_CAPACITY;
    int size = 0;

    char word[MAX_WORD_LENGTH];
    while (fscanf(file, "%s", word) != EOF) {
        bool found = false;
        for (int i = 0; i < size; i++) {
            if (strcmp(word, wordCounts[i].word) == 0) {
                wordCounts[i].count++;
                found = true;
                break;
            }
        }
        if (!found) {
            if (size == capacity) {
                capacity *= 2;
                wordCounts = realloc(wordCounts, capacity * sizeof(WordCount));
            }
            wordCounts[size].word = strdup(word);
            wordCounts[size].count = 1;
            size++;
        }
    }

    fclose(file);

    for (int i = 0; i < size; i++) {
        printf("%s: %d\n", wordCounts[i].word, wordCounts[i].count);
    }

    for (int i = 0; i < size; i++) {
        free(wordCounts[i].word);
    }
    free(wordCounts);

    return 0;
}

上述代码使用C语言实现了文本文件中单词出现次数统计的功能。程序首先打开文件,在处理过程中遍历文件中的每个单词,并使用哈希表记录每个单词的出现次数。最后,程序输出每个单词和它们的出现次数。

总结:

本程序通过使用哈希表实现了统计文件中单词出现次数的功能。它遍历文件中的每个单词,在哈希表中更新或添加相应的计数值,最后输出每个单词和它们的出现次数。该程序对于大型文本文件也适用,因为它动态地调整哈希表的大小以适应不同的输入。

文章评论