请改进这个代码,我需要的是字符串任意输入
时间: 2024-10-13 11:04:25 浏览: 14
js代码-字符串回文
为了处理任意长度和字符集的字符串,你可以考虑使用动态内存分配和函数指针。这里有一个基于C语言的简单版本,它允许用户输入任意大小的字符串并自动去重:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 使用哈希表存储已见字符
typedef struct {
unsigned long long hash;
bool isVisited;
} CharHash;
CharHash* createHashTable(int capacity) {
CharHash* table = (CharHash*)malloc(capacity * sizeof(CharHash));
memset(table, 0, capacity * sizeof(CharHash));
return table;
}
void insertIntoHashTable(CharHash** table, char ch) {
(*table)[ch].hash = ch;
(*table)[ch].isVisited = false;
}
bool containsInHashTable(CharHash** table, char ch) {
return (*table)[ch].hash == ch && !(*table)[ch].isVisited;
}
void removeDuplicatesFromStr(char* input, int capacity) {
CharHash* table = createHashTable(capacity);
int index = 0;
for (int i = 0; input[i]; i++) {
if (!containsInHashTable(table, input[i])) {
insertIntoHashTable(&table, input[i]);
input[index++] = input[i];
}
}
input[index] = '\0'; // 结束字符串
}
int main() {
char input[10000]; // 用户可以输入最多10000个字符
printf("Enter a string: ");
fgets(input, sizeof(input), stdin); // 考虑到fgets读取换行符
input[strcspn(input, "\n")] = '\0'; // 移除换行符
int capacity = strlen(input);
removeDuplicatesFromStr(input, capacity);
printf("No duplicate characters: %s\n", input);
free(table);
return 0;
}
```
现在,程序能处理任意输入的字符串,并在内部维护一个动态大小的哈希表进行去重。
阅读全文