本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。
输入格式:
输入是一个以回车结束的非空字符串(少于80个字符)。
输出格式:
输出去重排序后的结果字符串。
输入样例:
ad2f3adjfeainzzzv
输出样例:
23adefijnvz
#include<stdio.h>
#include<string.h>
#define N 85
int main(void)
{
int i, j, flag, len1 = 0, cnt = 0;
char ch, temp;
char str1[N]; //存储输入的字符串
char str2[N]; //存储处理后的字符串
ch = getchar(); //输入字符串
for (i = 0; ch != '\n'; i++)
{
str1[i] = ch;
len1++;
ch = getchar();
}
for (i = 0; i < len1; i++) //双重循环,删除str1[]中重复的字符
{
flag = 0; //每次开始循环都更新flag
for (j = 0; j < i; j++)
{
if (str1[i] == str1[j]) //在str1中查找重复的字符
{
flag = 1;
}
}
if (flag == 0)
{
str2[cnt] = str1[i]; //用str2保存从str1中找到的字符
cnt++; //记录不重复字符的个数
}
}
for (i = 0; i < cnt - 1; i++) //对str2[]排序: 冒泡排序 进行cnt-1次
{
for (j = 0; j < cnt - i - 1; j++)
{
if (str2[j] > str2[j + 1])
{
temp = str2[j];
str2[j] = str2[j + 1];
str2[j + 1] = temp;
}
}
}
for (i = 0; i < cnt; i++)
{
printf("%c", str2[i]);
}
printf("\n");
return 0;
}