本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。
输入格式:
输入是一个以回车结束的非空字符串(少于80个字符)。
输出格式:
输出去重排序后的结果字符串。
输入样例:
ad2f3adjfeainzzzv
输出样例:
23adefijnvz
代码:
#include <stdio.h>
#include <string.h>
void sort(char a[],int n);//冒泡排序函数
int main(){
int i = 0, j, k, flag;
char str[80],ch[80];
while((str[i] = getchar()) != '\n')//得到字符串
{
i++;
}
str[i] = '\0';
k = 0;//第一遍遍历去重字符
for(i = 0; str[i] != '\0'; i++)
{
flag = 1;
for(j = 0; j < i; j++)
{
if(str[i] == str[j])
flag=0;
}
if(flag == 1)
{
ch[k] = str[i];
k++;//没有重复字符
}
}
//用冒泡排序,把最大的排在最后
sort(ch,k);
//输出
for(i = 0; i < k; i++){
putchar(ch[i]);
}
return 0;
}
void sort(char a[],int n)//冒泡排序
{
int i, j;
char t;
for(i = 1; i < n; i++)
{
for(j = 0; j < n - i; j++)
{
if(a[j] > a[j+1])
{
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
}
C++代码:
#include <iostream>
using namespace std;
int ch[300];
int main()
{
char c;
c = getchar();
while(c != '\n')
{
ch[c] = 1;
c = getchar();
}
for(int i = 0; i < 128; i++)
{
if(ch[i] > 0)
{
printf("%c", i);
}
}
return 0;
}