本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。
输入格式:
输入是一个以回车结束的非空字符串(少于80个字符)。
输出格式:
输出去重排序后的结果字符串。
输入样例:
ad2f3adjfeainzzzv
输出样例:
23adefijnvz
分析:
- 首先,通过
gets(s);
读取用户输入的字符串,存储在字符数组s
中。 - 使用冒泡排序算法对字符串中的所有大写字母进行排序。这个过程通过两层循环实现,外层循环控制排序的次数,内层循环进行实际的比较和交换操作。
- 排序完成后,遍历字符串
s
,打印出所有相邻的字符,如果这两个字符不相等,就打印出这两个字符。这个操作实际上是将排序后的大写字母之后的字符(原本就是小写或者非字母字符)跳过,只打印出排序后的大写字母。
代码:
#include<stdio.h>
#include<string.h>
int main()
{
char s[80];
gets(s);
int i,j,t;
for(i=1;i<strlen(s);i++)
{
for(j=0;j<strlen(s)-i;j++)
{
if(s[j]>s[j+1])
{
t=s[j];
s[j]=s[j+1];
s[j+1]=t;
}
}
}
for(int m=0;m<strlen(s);m++)
{
if(s[m]!=s[m+1])
{
printf("%c",s[m]);
}
}
return 0;
}
总结:
注意:这段代码使用 gets()
函数读取用户输入,这在现代C语言编程中是不推荐的,因为 gets()
函数可能导致缓冲区溢出。建议使用 fgets()
函数代替。
同时,这段代码仅对大写字母进行排序,对小写字母和其他非字母字符不进行处理。如果输入的字符串中没有大写字母,那么输出将是空字符串。