3250:字母重排
总时间限制: 1000ms 内存限制: 65536kB
描述
输入为一行字符串,里面包含数字、字母(小写)等各种字符,要求把字符串里面的字母挑出来,按照ASCII码从小到大排序输出.
输入
输入为一行字符串(小于1024个字符),所有字母都是小写
输出
按ASCII码排序的字母串
样例输入
fasllafsk.afk()(das890124&(*%&*((hh8jjjdasj
样例输出
aaaaaddfffhhjjjjkkllssss
提示
可以利用数组解题
来源
cs10107 C++ Final Exam
问题链接:Bailian3250 字母重排
问题简述:(略)
问题分析:
从一个字符串中挑出所有字母来,使用头文件ctype.h是有效的,有库函数可用要尽量使用库函数。
这个问题使用C++语言来实现可以使用现成的排序算法,编写代码效率比较高。用C语言来实现,虽然也可以使用库函数qsort()来排序,带入参数复杂往往记不住。也可以自己编写排序程序来实现。
程序说明:(略)
参考链接:(略)
题记:(略)
AC的C语言程序如下:
/* Bailian3250 字母重排 */
#include <stdio.h>
#include <ctype.h>
#define N 1024
char s[N + 1];
int main()
{
scanf("%s", s);
int n = 0, i, j;
for(i = 0; s[i]; i++)
if(isalpha(s[i])) s[n++] = s[i];
s[n] = '\0';
/* 冒泡排序 */
char tmp;
for(i = 0; i < n - 1; i++)
for(j = n - 1; j >= i + 1; j--)
if(s[i] > s[j]) {
tmp = s[i];
s[i] = s[j];
s[j] = tmp;
}
printf("%s\n", s);
return 0;
}
AC的C++语言程序如下:
/* Bailian3250 字母重排 */
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cctype>
using namespace std;
const int N = 1024;
char s[N + 1];
int main()
{
scanf("%s", s);
int n = 0;
for(int i = 0; s[i]; i++)
if(isalpha(s[i])) s[n++] = s[i];
s[n] = '\0';
sort(s, s + n);
printf("%s\n", s);
return 0;
}