寻找重复字符串C语言
时间: 2024-09-27 22:00:49 浏览: 23
在C语言中查找重复的字符串通常涉及到动态内存分配、数组遍历以及字符串比较。你可以通过以下步骤实现:
1. 定义一个函数,接收一个字符数组作为输入,例如`char str[]`。
2. 计算字符串长度并创建一个哈希表(比如`struct StringHash`),用于存储每个字符串及其对应的索引。哈希表可以是一个结构体数组,包含字符串指针和计数。
3. 遍历数组,对于每个元素,检查其是否已经在哈希表中。如果不在,将其添加到哈希表,并设置计数为1;如果已经存在,增加该字符串的计数。
4. 检查哈希表,找出计数大于1的字符串,它们就是重复的。
```c
#include <stdio.h>
#include <string.h>
// 哈希表结构
typedef struct {
char *str;
int count;
} StringHash;
// 添加字符串到哈希表
void addToHashTable(StringHash *hashTable, char *str) {
for (int i = 0; hashTable[i].str != NULL; i++) {
if (strcmp(hashTable[i].str, str) == 0) {
hashTable[i].count++;
return;
}
}
// 如果没有找到相同的字符串,新建一项
hashTable[i].str = strdup(str);
hashTable[i].count = 1;
}
// 检查重复字符串
void findDuplicateStrings(char str[], StringHash *hashTable, int len) {
for (int i = 0; i < len; i++) {
addToHashTable(hashTable, &str[i]);
}
// 找出计数大于1的字符串
for (int i = 0; hashTable[i].str != NULL; i++) {
if (hashTable[i].count > 1) {
printf("重复字符串: %s\n", hashTable[i].str);
}
}
}
int main() {
char strings[5][100];
// ...填充字符串...
int n = sizeof(strings) / sizeof(strings[0]);
StringHash hashTable[n];
findDuplicateStrings(strings, hashTable, n);
return 0;
}
```