用C语言编写程序删除重复字符,将给定字符串去掉重复的字符后,按照字符ASCll码顺序从小到大排序后输出。输入格式,输入是一个以回车结束的非空字符串(少于80个字符)输出格式,输出去重排序后的结果字符串,输入样例ad2f3adjfeainzzzv
时间: 2024-10-24 11:09:08 浏览: 69
在C语言中,你可以通过以下几个步骤来实现这个功能:
1. 定义一个函数来处理字符串并去除重复字符。首先创建一个哈希表(如数组或者使用`std::unordered_set`),用于存储遇到过的字符。遍历输入字符串,如果字符不在哈希表中,则添加到表中,并更新其对应的下标。
```c
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
// 去除重复字符并记录每个字符的位置
void removeDuplicates(char *str) {
int hash[256] = {0};
int index = 0;
for (int i = 0; str[i] != '\0'; ++i) {
if (hash[str[i]] == 0) {
hash[str[i]] = index++;
}
}
}
```
2. 创建一个新的字符串来保存去重后的结果。然后,遍历原字符串,只添加哈希表中有值的字符及其位置对应的新字符到新字符串。
```c
// 新建一个字符串,按照ASCII码顺序添加字符
char result[index];
memset(result, 0, sizeof(result));
for (int i = 0; i < index; ++i) {
result[i] = str[hash[str[i]]];
}
result[index] = '\0'; // 添加字符串结束符
```
3. 最后,对结果字符串按照ASCII码排序并打印出来。
```c
// 对字符串进行排序
qsort(result, index, sizeof(result[0]), strcmp);
// 输出结果
printf("%s\n", result);
```
完整代码示例:
```c
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <stdlib.h> // 使用qsort需要头文件
// 字符比较函数,用于排序
int compare(const void* a, const void* b) {
return *(const char*)a - *(const char*)b;
}
int main() {
char input[] = "ad2f3adjfeainzzzv";
int len = strlen(input);
removeDuplicates(input); // 去重
char result[len];
memset(result, 0, sizeof(result));
// 添加去重后的字符到新字符串并排序
for (int i = 0; i < len; ++i) {
result[i] = input[hash[input[i]]];
}
result[len] = '\0';
qsort(result, len, sizeof(result[0]), compare); // 排序
printf("%s\n", result);
return 0;
}
```
运行这个程序,输入样例 "ad2f3adjfeainzzzv" 的输出将是 "abcdefinuv"。
阅读全文