求大神解答想用c语言写一个自动筛选文档重复元素的程序?????

想写一个自动筛选文档重复元素的程序,当输入内容时有与以前内用相同的元素,弹出提示框,没有相同元素不弹出,并可以继续输入新内容。

参考GPT和自己的思路:

你可以使用哈希表或者散列表来实现这个功能。在输入新内容时,将其加入到哈希表或散列表中,如果发现重复的元素,则弹出提示框。如果没有重复的元素,则继续输入新内容并将其加入到哈希表或散列表中。以下是一个可能的实现示例:

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

#define MAX_LEN 1000  // 最大输入长度
#define TABLE_SIZE 1000  // 哈希表大小

// 哈希表节点结构体
typedef struct node {
    char data[MAX_LEN];
    struct node* next;
} Node;

// 哈希表结构体
typedef struct {
    Node* table[TABLE_SIZE];
} HashTable;

// 哈希函数
unsigned int hash(char* str) {
    unsigned int hashval = 0;
    for (; *str != '\0'; str++) {
        hashval = *str + 31 * hashval;
    }
    return hashval % TABLE_SIZE;
}

// 初始化哈希表
void initHashTable(HashTable* hashtable) {
    for (int i = 0; i < TABLE_SIZE; i++) {
        hashtable->table[i] = NULL;
    }
}

// 插入元素到哈希表
void insertToHashTable(HashTable* hashtable, char* str) {
    unsigned int pos = hash(str);
    Node* p = hashtable->table[pos];
    while (p != NULL) {
        if (strcmp(p->data, str) == 0) {
            printf("提示:元素 '%s' 已存在!\n", str);
            return;
        }
        p = p->next;
    }
    p = (Node*)malloc(sizeof(Node));
    strcpy(p->data, str);
    p->next = hashtable->table[pos];
    hashtable->table[pos] = p;
}

int main() {
    HashTable hashtable;
    initHashTable(&hashtable);
    char input[MAX_LEN];
    while (1) {
        printf("请输入元素(输入 q 退出):");
        scanf("%s", input);
        if (strcmp(input, "q") == 0) {
            break;
        }
        insertToHashTable(&hashtable, input);
    }
    return 0;
}

这个程序可以不断地让用户输入元素,如果输入的元素已经存在于哈希表中,则会弹出提示框;如果输入的元素不存在于哈希表中,则会将其加入到哈希表中。可根据实际需要对该程序进行修改和优化。