如何用c语言实现单词统计

什么是单词统计?

单词统计是指统计一篇文章或一段文本中各个单词的出现次数。对于程序员来说,经常需要进行单词统计,因为这可以帮助他们分析一些庞杂的文本数据。C语言作为一门常用的编程语言,可以通过编写相应的程序来实现单词统计。

实现思路

在开始编写单词统计的程序之前,需要明确实现的思路。下面是一个实现单词统计的基本思路:

1.读入文本

程序需要从外部文件或者标准输入中读入文本。在读取文本之后,将其保存到内存中,以便后续的操作。

2.将文本拆分成单词

读取文本后,需要将其拆分成单词。在这个过程中,需要去除文本中的标点符号和换行符等干扰因素。

3.统计单词出现的次数

拆分出所有单词之后,需要将这些单词保存到数据结构中,然后统计每个单词出现的次数。

4.输出结果

最后将统计的结果输出到屏幕或文件中。

代码实现

下面是一个使用C语言实现单词统计的示例程序。

#include <stdio.h>

#include <string.h>

#include &lstdlib.h>

#define MAX_WORD_LENGTH 100

typedef struct node {

char* word;

int count;

struct node* next;

} node;

int main(int argc, char* argv[]) {

node* head = NULL;

char* word = (char*)malloc(MAX_WORD_LENGTH + 1);

int word_length = 0;

int is_word = 0;

FILE* fp = NULL;

if (argc < 2) {

printf("Usage: %s filename\n", argv[0]);

return 1;

}

fp = fopen(argv[1], "r");

if (!fp) {

printf("Failed to open file %s\n", argv[1]);

return 1;

}

while (1) {

int c = fgetc(fp);

if (isalpha(c)) {

word[word_length++] = tolower(c);

is_word = 1;

} else if (is_word) {

word[word_length] = '\0';

if (!head) {

head = (node*)malloc(sizeof(node));

head->word = (char*)malloc(strlen(word) + 1);

strcpy(head->word, word);

head->count = 1;

head->next = NULL;

} else {

node* p = head;

while (p) {

if (strcmp(p->word, word) == 0) {

p->count++;

break;

}

if (!p->next) {

p->next = (node*)malloc(sizeof(node));

p = p->next;

p->word = (char*)malloc(strlen(word) + 1);

strcpy(p->word, word);

p->count = 1;

p->next = NULL;

break;

}

p = p->next;

}

}

word_length = 0;

is_word = 0;

}

if (c == EOF) break;

}

fclose(fp);

node* p = head;

while (p) {

printf("%20s: %d\n", p->word, p->count);

node* q = p;

p = p->next;

free(q->word);

free(q);

}

return 0;

}

代码解释

这个示例程序使用了一个链表来存储单词及其出现的次数。程序的主要结构如下:

typedef struct node {

char* word;

int count;

struct node* next;

} node;

这个结构定义了一个链表节点,包含一个单词指针、一个计数器和一个指向下一个节点的指针。其中,单词指针是一个指向 char 型的指针,用来存储单词。计数器用来记录单词出现的次数。

在程序中,首先判断传入的命令行参数,如果参数数量不足,则输出提示信息并退出程序。程序通过 fopen 函数打开传入的文件。在循环中,程序不断读取文件中的字符,判断当前字符是否为字母。如果是,则将其存储到数组 word 中,并将 is_word 标记为 1;否则,将 word 中的字符拼接为完整的单词,并将单词存储到链表中。在存储单词之前,程序需要将单词转换为小写形式。

在统计结束后,程序输出每个单词及其出现的次数,然后释放所有节点的内存空间。

总结

本篇文章介绍了如何使用C语言实现单词统计。在实现过程中,我们使用了一个链表来存储单词及其出现的次数。这个示例程序可以帮助程序员更好地理解C语言的基础语法和数据结构。如果你对C语言还不太熟悉,可以通过本文中的示例代码来加深自己的理解。

后端开发标签