想写一个自动筛选文档重复元素的程序,当输入内容时有与以前内用相同的元素,弹出提示框,没有相同元素不弹出,并可以继续输入新内容。
参考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;
}
这个程序可以不断地让用户输入元素,如果输入的元素已经存在于哈希表中,则会弹出提示框;如果输入的元素不存在于哈希表中,则会将其加入到哈希表中。可根据实际需要对该程序进行修改和优化。