整理药名

GitHub跳转原题关系图返回列表

逐个药名逐字符规范化:首字符用 toupper 转大写,其余字符用 tolower 转小写,数字和 - 自动原样保留。

OJ: roj

题目 ID: 1139

难度:入门

标签:入门字符串python

创建: 2026-09-29 20:37

更新: 2026-10-05 03:07

题目描述

医生书写的药品名大小写混乱,需要整理成规范格式:第一个字符若是字母则大写,其余位置的字母一律小写,数字和 - 原样保留。

输入第一行一个整数 nn(n≤100n \le 100),接下来 nn 行每行一个药品名,长度不超过 20,只由字母、数字和 - 组成。输出 nn 行,每行是对应的规范写法。

样例输入:

text
4
AspiRin
cisapride
2-PENICILLIN
Cefradine-6

样例输出:

text
Aspirin
Cisapride
2-penicillin
Cefradine-6

思路

每个药品名互相独立,逐个处理即可。对当前单词逐字符扫描:首字符用 toupper 转大写,其余字符用 tolower 转小写,而 toupper/tolower 对非字母字符返回原字符,2-PENICILLIN 这类带数字和 - 的名字就自动保留原样。总长度不超过 100×20=2000100 \times 20 = 2000,O(∑Li)O(\sum L_i) 的扫描完全够用。

参考代码

Python 版:

python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-09-29 20:37
# update_at: 2026-09-29 20:37

import sys


def normalize(word: str) -> str:
    """首字符若为字母则大写,其余字符一律小写;数字和 - 原样保留。"""
    return word[:1].upper() + word[1:].lower()


def solve() -> None:
    data = iter(sys.stdin.read().split())
    n = int(next(data))            # 第一行是药名个数,n 不超过 100

    # 每个药名长度不超过 20,逐个规范化后按行输出
    print('\n'.join(normalize(next(data)) for _ in range(n)))


if __name__ == "__main__":
    solve()

C++ 版(同一算法):

cpp
/**
 * Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
 * rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
 * rainboy的学习导航网站: https://idx.roj.ac.cn
 * create_at: 2026-10-05 03:07
 * update_at: 2026-10-05 03:07
 */
// main.cpp:逐个药名整理大小写,首位字母大写、其余字母小写。
#include <cctype>
#include <iostream>
#include <string>

typedef long long ll;

ll n; // 需要整理的药名个数,不超过 100

int main() {
    std::cin >> n;
    for (ll i = 1; i <= n; i++) {
        std::string word;
        std::cin >> word;
        ll len = word.size(); // 每个药名长度不超过 20
        for (ll j = 0; j < len; j++) {
            // 首位字母转大写,其余字母转小写;数字和 - 不是字母,保持不变
            if (j == 0) {
                word[j] = std::toupper(word[j]);
            } else {
                word[j] = std::tolower(word[j]);
            }
        }
        std::cout << word << std::endl;
    }
    return 0;
}