EOJ3021-字符排序

题目

给定一个句子,要求将其字符重新排序输出,其中的英文字母按照字母表顺序输出,其他字符的顺序和位置不变,输出后的单词长度与原句子相同。

格式

input
第 1 行:一个整数 T (1≤T≤10) 为问题数。
第 2 T+1 行,每组测试数据一行,包括一个字符串(长度最大为 200),由英文字母(均为大写字母)及其他字符组成,由空格分开的连续字符串视作一个单词。

output
对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0: 等),然后在一行中输出重新排序后的字符串。

样例

input
3
THE BREAD IS SOLD AT $10 PER POUND
500 DONGCHUAN ROAD EAST CHINA NORMAL UNIVERSITY SHANGHAI CHINA 200241
#9724 $500 1234

output
case #0:
AAB DDDEE EH ILNO OP $10 PRR SSTTU
case #1:
500 AAAAAAAAC CCDD EEGG HHHHH IIIIIL MNNNNNNNOO ORRRSSST TUUVY 200241
case #2:
#9724 $500 1234

代码

#include <iostream>
#include <algorithm>
#include <string>
#include <ctype.h>
using namespace std;

int main() {

    int a[26] = { 0 };
    string str;
    int n, i, j, temp;
    cin >> n;
    getchar();
    for (i = 0; i < n; i++) {
        getline(cin, str);
        for (j = 0; j < str.size(); j++) {
            if (isalpha(str[j]))
                a[(str[j] - 'A')]++;
        }
        temp = 0;
        for (j = 0; j < str.size(); j++) {
            if (isalpha(str[j])) {
                while (a[temp] == 0) temp++;
                str[j] = temp + 'A';
                a[temp]--;
            }
        }
        cout << "case #" << i << ":" << endl;
        cout << str << endl;
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/Caiyii530/article/details/105473230