用C语言编写一个程序,从键盘接收一个字符串,然后按照字符顺序从小到大进行排序,并删除重复的字符。
时间: 2024-12-26 15:28:08 浏览: 6
在C语言中,我们可以使用数组、循环和临时存储来实现这个功能。下面是一个简单的示例程序,它首先从用户输入接收字符串,然后排序并去除重复字符:
```c
#include <stdio.h>
#include <string.h>
#include <ctype.h> // 包含处理字符的库
#define MAX_CHAR 100 // 设置最大字符数
char str[MAX_CHAR];
char sortedStr[MAX_CHAR]; // 用于存放排序后的字符串
int sortedIndex = 0; // 已排序字符的位置索引
// 检查是否为字母
int isAlpha(char c) {
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
}
void removeDuplicates() {
int i, j;
for (i = 0; i < strlen(sortedStr); ++i) {
if (isAlpha(sortedStr[i])) { // 只保留字母
while (sortedStr[j] != '\0' && sortedStr[j] != sortedStr[i]) {
++j;
}
if (sortedStr[j] == '\0') { // 如果后面没找到重复,添加当前字符
sortedStr[sortedIndex++] = sortedStr[i];
}
}
}
sortedStr[sortedIndex] = '\0'; // 添加结束符
}
void sortAndRemoveDuplicates() {
char temp[MAX_CHAR];
int len = strlen(str);
for (int i = 0; i < len; ++i) {
for (int j = i + 1; j < len; ++j) {
if (str[i] > str[j]) { // 从小到大排序
temp[sortedIndex++] = str[j];
str[j] = str[i];
str[i] = temp[i];
} else if (isAlpha(str[j]) && str[j] == str[i]) { // 去除重复字母
continue;
}
}
}
memcpy(sortedStr, str, sortedIndex+1); // 将排序结果复制回临时数组
removeDuplicates(); // 再次去除重复
}
int main() {
printf("请输入一个字符串: ");
fgets(str, MAX_CHAR, stdin); // 接收用户输入
str[strlen(str)-1] = '\0'; // 删除fgets带来的换行符
sortAndRemoveDuplicates();
printf("排序并去重后的字符串: %s\n", sortedStr);
return 0;
}
```
当你运行此程序,它会提示你输入一个字符串,然后显示排序并去重后的结果。注意,这个程序只考虑了小写字母,并且假设输入的都是英文字符。如果你需要处理其他语言的字符,可能需要修改`isAlpha`函数。
阅读全文