c语言怎么统计单词出现的次数

   2025-02-15 7700
核心提示:在C语言中,可以使用哈希表或者数组来统计单词出现的次数。使用哈希表:#include stdio.h#include stdlib.h#include string.h//

在C语言中,可以使用哈希表或者数组来统计单词出现的次数。

使用哈希表:
#include <stdio.h>#include <stdlib.h>#include <string.h>// 定义哈希表的大小#define HASH_SIZE 100// 哈希表节点结构typedef struct Node {    char word[256];  // 单词    int count;       // 出现次数    struct Node* next;} Node;// 哈希函数int hash(char* word) {    int sum = 0;    for (int i = 0; i < strlen(word); i++) {        sum += word[i];    }    return sum % HASH_SIZE;}// 向哈希表中插入节点void insert(Node** hashTable, char* word) {    int index = hash(word);    Node* newNode = (Node*)malloc(sizeof(Node));    strcpy(newNode->word, word);    newNode->count = 1;    newNode->next = NULL;    if (hashTable[index] == NULL) {        hashTable[index] = newNode;    } else {        Node* cur = hashTable[index];        while (cur->next != NULL) {            if (strcmp(cur->word, word) == 0) {                cur->count++;                free(newNode);                return;            }            cur = cur->next;        }        if (strcmp(cur->word, word) == 0) {            cur->count++;            free(newNode);        } else {            cur->next = newNode;        }    }}// 统计单词出现的次数void wordCount(char* sentence) {    Node* hashTable[HASH_SIZE] = {NULL};    char* word = strtok(sentence, " ");    while (word != NULL) {        insert(hashTable, word);        word = strtok(NULL, " ");    }    for (int i = 0; i < HASH_SIZE; i++) {        Node* cur = hashTable[i];        while (cur != NULL) {            printf("%s: %d\n", cur->word, cur->count);            cur = cur->next;        }    }}int main() {    char sentence[] = "this is a test sentence to count word occurrences";    wordCount(sentence);    return 0;}
使用数组:
#include <stdio.h>#include <stdlib.h>#include <string.h>// 统计单词出现的次数void wordCount(char* sentence) {    typedef struct {        char word[256];        int count;    } Word;        int wordCount = 0;    Word* wordArray = (Word*)malloc(sizeof(Word) * wordCount);    char* word = strtok(sentence, " ");    while (word != NULL) {        int exist = 0;        for (int i = 0; i < wordCount; i++) {            if (strcmp(wordArray[i].word, word) == 0) {                wordArray[i].count++;                exist = 1;                break;            }        }        if (!exist) {            wordCount++;            wordArray = (Word*)realloc(wordArray, sizeof(Word) * wordCount);            strcpy(wordArray[wordCount - 1].word, word);            wordArray[wordCount - 1].count = 1;        }        word = strtok(NULL, " ");    }    for (int i = 0; i < wordCount; i++) {        printf("%s: %d\n", wordArray[i].word, wordArray[i].count);    }    free(wordArray);}int main() {    char sentence[] = "this is a test sentence to count word occurrences";    wordCount(sentence);    return 0;}

以上是两种统计单词出现次数的方法,分别使用哈希表和数组来实现。可以根据实际情况选择适合的方法。

 
 
更多>同类维修知识
推荐图文
推荐维修知识
点击排行
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  网站留言