如何用C语言编写一个函数,用于合并两个字符串并删除其中的重复字符?
时间: 2024-12-14 19:24:56 浏览: 17
在C语言中,你可以创建一个函数来合并两个字符串并删除重复字符。这里是一个简单的例子,使用了哈希表(即数组)来跟踪已经遇到过的字符:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_CHAR 256
// 函数声明
char* merge_and_remove_duplicates(char* str1, char* str2);
// 助手函数,用于检查字符是否已存在于哈希表中
bool is_char_unique(int hash[], int c) {
return hash[c] == false;
}
// 主函数,更新哈希表,并合并字符串
char* merge_and_remove_duplicates(char* str1, char* str2) {
int len1 = strlen(str1);
int len2 = strlen(str2);
int hash[MAX_CHAR] = {false}; // 初始化哈希表
char result[len1 + len2 + 1]; // 结果字符串
result[len1 + len2] = '\0'; // 结尾添加空字符
// 合并并删除重复字符
for (int i = 0; i < len1; i++) {
if (is_char_unique(hash, str1[i])) {
result[i] = str1[i];
hash[str1[i]] = true;
}
}
for (int j = 0; j < len2; j++) {
if (is_char_unique(hash, str2[j])) {
result[len1 + j] = str2[j];
hash[str2[j]] = true;
}
}
return result;
}
int main() {
char str1[] = "hello";
char str2[] = "world";
char* merged_str = merge_and_remove_duplicates(str1, str2);
printf("Merged and unique string: %s\n", merged_str);
free(merged_str); // 释放内存
return 0;
}
```
这个程序首先初始化一个大小为ASCII字符集大小的布尔型数组作为哈希表,然后遍历每个输入字符串,如果字符未在哈希表中,则将其添加到结果字符串中并标记为已存在。
阅读全文