C语言写一个函数,去掉一个字符串中重复的字符
时间: 2024-11-04 07:14:13 浏览: 8
在C语言中,去除字符串中重复字符的一个常见方法是使用数组或者哈希表。这里我们使用一个动态分配的数组来存储已遇到过的字符及其索引。以下是实现该功能的一个简单函数:
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// 去除字符串中重复字符的函数
void removeDuplicates(char *str) {
int len = strlen(str);
if (len == 0 || str[0] == '\0') {
printf("Empty string or null pointer.\n");
return;
}
// 动态创建一个大小为len+1的字符数组,用于存储唯一的字符
char* uniqueChars = (char*)malloc((len + 1) * sizeof(char));
int index = 0;
for (int i = 0; i < len; ++i) {
char currentChar = str[i];
// 如果当前字符还没见过,将其添加到uniqueChars并更新索引
if (uniqueChars[index] == '\0' || uniqueChars[index] != currentChar) {
uniqueChars[index++] = currentChar;
}
}
uniqueChars[index] = '\0'; // 结束字符串
// 将去重后的字符复制回原字符串
strncpy(str, uniqueChars, index); // 注意:不会覆盖末尾空字符
free(uniqueChars); // 释放内存
}
int main() {
char str[] = "abbcccdddd";
removeDuplicates(str);
printf("String after removing duplicates: %s\n", str);
return 0;
}
```
这个函数首先判断输入字符串是否为空或空指针,然后创建一个动态数组,遍历输入字符串,如果字符未在数组中,则添加到数组。最后,将去重后的字符复制回原始字符串。
注意:此解决方案假设输入字符串包含的是ASCII字符,对于UTF-8或其他编码,需要使用更大的数据结构。
阅读全文