用c++输出wordlist中每个单词相关的单词和个数
时间: 2024-01-28 09:05:39 浏览: 134
C++读取一文本文件并进行单词统计结果
4星 · 用户满意度95%
假设wordlist中存储了一些单词,可以使用哈希表来存储单词及其相关的单词和个数。下面是一个简单的C代码示例:
```c
#include <stdio.h>
#include <string.h>
#define MAX_WORD_LEN 50
#define MAX_WORD_NUM 1000
typedef struct node {
char word[MAX_WORD_LEN];
int count;
struct node *next;
} Node;
Node *hashTable[MAX_WORD_NUM] = {NULL}; // 哈希表
int hash(char *word) {
int sum = 0;
for (int i = 0; i < strlen(word); i++) {
sum += word[i];
}
return sum % MAX_WORD_NUM;
}
void insert(char *word, char *related_word) {
int index = hash(word);
Node *p = hashTable[index];
while (p != NULL) {
if (strcmp(p->word, word) == 0) {
break;
}
p = p->next;
}
if (p == NULL) {
p = (Node *) malloc(sizeof(Node));
strcpy(p->word, word);
p->count = 0;
p->next = hashTable[index];
hashTable[index] = p;
}
p->count++;
Node *q = p;
while (q->next != NULL) {
if (strcmp(q->word, related_word) == 0) {
return;
}
q = q->next;
}
Node *r = (Node *) malloc(sizeof(Node));
strcpy(r->word, related_word);
r->count = 1;
r->next = NULL;
q->next = r;
}
void output() {
for (int i = 0; i < MAX_WORD_NUM; i++) {
Node *p = hashTable[i];
while (p != NULL) {
printf("%s: %d\n", p->word, p->count);
Node *q = p->next;
while (q != NULL) {
printf("- %s: %d\n", q->word, q->count);
q = q->next;
}
p = p->next;
}
}
}
int main() {
char word[MAX_WORD_LEN], related_word[MAX_WORD_LEN];
while (scanf("%s %s", word, related_word) != EOF) {
insert(word, related_word);
insert(related_word, word);
}
output();
return 0;
}
```
在输入阶段,对于每个单词及其相关的单词,调用insert函数插入哈希表中。在insert函数中,先查找哈希表中是否已经存在该单词的节点,如果不存在,则创建一个新节点,并将其插入哈希表中。然后遍历该单词节点的相关单词链表,如果已经存在相关单词,则不做处理,否则创建一个新节点,并将其插入相关单词链表中。
最后调用output函数输出每个单词及其相关的单词和个数。
阅读全文