本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。
输入格式:
输入是一个以回车结束的非空字符串(少于80个字符)。
输出格式:
输出去重排序后的结果字符串。
输入样例:
ad2f3adjfeainzzzv
输出样例:
23adefijnvz
#include <stdio.h>
#include <string.h>
int main()
{
char str[81];
int flag[128] = {0};
scanf("%s", str);
for(int i = 0; str[i]; i++)
{
flag[str[i]] = 1;
}
for(int i = 0; i < 128; i++)
{
if(flag[i] == 1) printf("%c", i);
}
return 0;
}
或者
#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 80
int main() {
char input[MAX_LENGTH];
char unique[MAX_LENGTH];
int count[256] = {0}; // 用于记录字符出现的次数
int index = 0;
// 输入字符串
fgets(input, MAX_LENGTH, stdin);
// 去重并记录字符
for (int i = 0; input[i] != '\0'; i++) {
unsigned char ch = input[i];
if (ch != '\n' && count[ch] == 0) {
count[ch] = 1; // 标记字符已出现
unique[index++] = ch; // 添加到结果数组
}
}
// 终止 unique 字符串
unique[index] = '\0';
// 排序
for (int i = 0; i < index - 1; i++) {
for (int j = 0; j < index - i - 1; j++) {
if (unique[j] > unique[j + 1]) {
// 交换
char temp = unique[j];
unique[j] = unique[j + 1];
unique[j + 1] = temp;
}
}
}
// 输出结果
printf("%s\n", unique);
return 0;
}