逐个药名逐字符规范化:首字符用 toupper 转大写,其余字符用 tolower 转小写,数字和 - 自动原样保留。
OJ: roj
题目 ID: 1139
难度:入门
标签:入门字符串python
创建: 2026-09-29 20:37
更新: 2026-10-05 03:07
题目描述
医生书写的药品名大小写混乱,需要整理成规范格式:第一个字符若是字母则大写,其余位置的字母一律小写,数字和 - 原样保留。
输入第一行一个整数 - 组成。输出
样例输入:
text
4
AspiRin
cisapride
2-PENICILLIN
Cefradine-6样例输出:
text
Aspirin
Cisapride
2-penicillin
Cefradine-6思路
每个药品名互相独立,逐个处理即可。对当前单词逐字符扫描:首字符用 toupper 转大写,其余字符用 tolower 转小写,而 toupper/tolower 对非字母字符返回原字符,2-PENICILLIN 这类带数字和 - 的名字就自动保留原样。总长度不超过
参考代码
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;
}