本题要求编写程序,将给定字符串去掉重复的字符后,按照字符 ASCII 码顺序从小到大排序后输出。
输入格式:
输入是一个以回车结束的非空字符串(少于 80 个字符)。
输出格式:
输出去重排序后的结果字符串。
输入样例:
ad2f3adjfeainzzzv
输出样例:
23adefijnvz
来源:
来源:PTA | 程序设计类实验辅助教学平台
链接:https://pintia.cn/problem-sets/13/exam/problems/529
提交:
题解:
#include<stdio.h>
#include<string.h>
int main(void) {
char s[80];
gets(s);
int sLen = (int) strlen(s);
// 删除字符串中重复的字符
for (int i = 0; i < sLen; i++) {
// 从剩下的 sLen-i 个字符中找出重复的字符并删除
for (int j = i + 1; j < sLen; j++) {
if (s[j] == s[i]) {
for (int k = j; k < sLen; k++) {
// 后续字符串前移,实现删除字符
s[k] = s[k + 1];
}
// 长度减1
s[--sLen] = '\0';
// 再次从 i 处开始判断,解决连续重复字符情况
i--;
}
}
}
// 选择排序法,按 ASCII 码值从小到大排序
for (int i = 0; i < sLen; i++) {
for (int j = i + 1; j < sLen; j++) {
if (s[j] < s[i]) {
char temp = s[j];
s[j] = s[i];
s[i] = temp;
}
}
}
puts(s);
return 0;
}