{ }codelper
列表排序P0253

整理招牌字块

招牌店把单词招牌拆下来,把字块按顺序整理进箱子。
第一行给出单词数 n,接下来 n 行每行给出一个单词。
单词只由数字(0~9)、英文大写字母和英文小写字母组成。
对每个单词,把它的字符按字符编码(ASCII)从小到大排列,在一行中输出得到的字符串。
因此所有数字都排在大写字母前面,所有大写字母都排在小写字母前面(b、A、9、a → 9Aab)。
相同的字符出现几次就写几次。

输入
1 ≤ n ≤ 100,单词长度 1 ~ 1,000。
单词只含数字和英文大小写字母
输出
n 行,每行是按编码顺序排列的字符串
样例 1 · stdin
3
banana
Codelper2026
ZzAa
stdout
aaabnn
0226Cdeelopr
AZaz
main.py
输入(stdin)

运行时这些行会依次作为 input()/标准输入传入(运行中不会等待输入)。

$ 就绪

请在电脑上打开以编写和运行代码。在手机上可以查看题目和题解。

其他语言怎么写?查看各语言题解 · 8 种语言题解

分三步:把字符串变成字符列表,排序,再连接回字符串。
各语言的陷阱都在最后一步。
Python sorted(w) 返回字符列表,直接输出会得到 ['a', 'b'],要用 "".join(sorted(w)) 连接。
Java 在 char[] a = w.toCharArray(); Arrays.sort(a); 之后用 new String(a) 转换。
a.toString() 给出 [C@1b6d3586 这样的文字,C# 的 a.ToString() 给出 System.Char[](C# 用 Array.Sort(a) 之后 new string(a))。
JS/TS 写 [...w].sort().join(""),但如果照搬给数字排序用的 (a, b) => a - b,字符相减得到 NaN,什么都不会动。
对字符来说,不带比较函数的 sort() 就是编码顺序。
C++ 用 std::sort(w.begin(), w.end()) 直接给字符串排序,C 用 qsort(w, strlen(w), 1, cmp) 给 1 字节的格子排序。
Craykon 用 遍历 (c 在 w) 把字符放进列表,letters.排序(); 之后用 letters.连接("") 连接。
顺序是编码顺序而不是字典顺序,所以大写 Z(90)在小写 a(97)前面。
忽略大小写排序(key=str.lower)会把 ZzAa 排成 AaZz,是错的。

Pythonmain.py · 5 行
n = int(input())for _ in range(n):    w = input().strip()    # sorted(문자열)은 글자 목록을 준다 → "".join으로 다시 문자열로    print("".join(sorted(w)))
JavaScriptmain.js · 3 行
const [n, ...words] = require("fs").readFileSync(0, "utf8").trim().split(/\s+/);// 글자끼리는 비교 함수 없이 sort()가 글자 코드 순이다console.log(words.map((w) => [...w].sort().join("")).join("\n"));
TypeScriptmain.ts · 4 行
import { readFileSync } from "node:fs";const [n, ...words]: string[] = readFileSync(0, "utf8").trim().split(/\s+/);const sorted: string[] = words.map((w: string) => [...w].sort().join(""));console.log(sorted.join("\n"));
JavaMain.java · 18 行
import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Arrays; public class Main {    public static void main(String[] args) throws Exception {        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));        int n = Integer.parseInt(in.readLine().trim());        StringBuilder out = new StringBuilder();        for (int i = 0; i < n; i++) {            char[] a = in.readLine().trim().toCharArray();            Arrays.sort(a);            // char[]를 문자열로: new String(a) (a.toString()은 주소 같은 글자가 나온다)            out.append(new String(a)).append('\n');        }        System.out.print(out);    }}
C#Main.cs · 18 行
using System;using System.Text; class Program{    static void Main()    {        int n = int.Parse(Console.ReadLine().Trim());        var sb = new StringBuilder();        for (int i = 0; i < n; i++)        {            char[] a = Console.ReadLine().Trim().ToCharArray();            Array.Sort(a);   // char는 코드 순으로 정렬된다            sb.Append(new string(a)).Append('\n');        }        Console.Write(sb);    }}
C++main.cpp · 16 行
#include <algorithm>#include <iostream>#include <string> int main() {    int n;    std::cin >> n;    std::string out;    for (int k = 0; k < n; k++) {        std::string w;        std::cin >> w;        std::sort(w.begin(), w.end());   // string은 char를 담은 목록처럼 바로 정렬된다        out += w + "\n";    }    std::cout << out;}
Cmain.c · 20 行
#include <stdio.h>#include <stdlib.h>#include <string.h> static int by_code(const void *pa, const void *pb) {    unsigned char a = *(const unsigned char *)pa, b = *(const unsigned char *)pb;    return (a > b) - (a < b);} int main(void) {    int n;    static char w[1024];    scanf("%d", &n);    for (int k = 0; k < n; k++) {        scanf("%1023s", w);        qsort(w, strlen(w), 1, by_code);   /* 글자 하나가 1바이트 */        puts(w);    }    return 0;}
Craykonmain.cray · 13 行
n = 控制台.读行().转数字();循环 (i = 0; i < n; i++){    w = 控制台.读行().去空白();    // 문자열을 글자 목록으로 옮겨 정렬하고 다시 잇는다    글자들 = [];    遍历 (c 在 w)    {        글자들.添加(c);    }    글자들.排序();    控制台.输出(글자들.连接(""));}