整理药名
题目描述
医生在书写药品名的时候经常不注意大小写,格式比较混乱。现要求你写一个程序将医生书写混乱的药品名整理成统一规范的格式,即药品名的第一个字符如果是字母要大写,其他字母小写。
如将 ASPIRIN 、 aspirin 整理成 Aspirin。
输入格式
第一行一个数字 n n n,表示有 n n n 个药品名要整理, n n n 不超过 100 100 100。
接下来 n n n 行,每行一个单词,长度不超过 20 20 20,表示医生手书的药品名。
药品名由字母、数字和 - 组成。
输出格式
n n n 行,每行一个单词,对应输入的药品名的规范写法。
样例 #1
样例输入 #1
4
AspiRin
cisapride
2-PENICILLIN
Cefradine-6
样例输出 #1
Aspirin
Cisapride
2-penicillin
Cefradine-6
题目描述:
- 题目要求我们将医生书写混乱的药品名整理成统一规范的格式。
- 药品名的第一个字符如果是字母,要大写;其他字母要小写。
- 输入包含多个药品名,需要对每个药品名进行整理。
解题思路:
- 首先,我们需要读取输入的药品名数量 n n n。
- 然后,使用循环读取 n n n 个药品名,对于每个药品名:
- 如果第一个字符是字母,将其转换为大写。
- 将其余字符转换为小写。
- 将整理后的药品名存储起来。
- 最后,将整理后的药品名逐行输出。
C++代码实现:
#include <iostream>
#include <string>
#include <cctype>
using namespace std;// 整理药品名的函数
string formatDrugName(string name) {string formattedName = "";for (int i = 0; i < name.length(); i++) {if (i == 0 && isalpha(name[i])) {formattedName += toupper(name[i]); // 第一个字符如果是字母,转换为大写} else {formattedName += tolower(name[i]); // 其余字符转换为小写}}return formattedName;
}int main() {int n;cin >> n; // 读取药品名数量string drugNames[n]; // 存储整理后的药品名cin.ignore(); // 忽略换行符for (int i = 0; i < n; i++) {string name;getline(cin, name); // 读取一行药品名drugNames[i] = formatDrugName(name); // 整理药品名并存储}// 输出整理后的药品名for (int i = 0; i < n; i++) {cout << drugNames[i] << endl;}return 0;
}
代码解释:
- 我们定义了一个函数
formatDrugName
,用于整理药品名的格式。函数接受一个字符串name
作为参数,表示原始的药品名。 - 在函数内部,我们使用一个循环遍历药品名的每个字符:
- 如果当前字符是第一个字符并且是字母,我们使用
toupper
函数将其转换为大写,并将转换后的字符添加到整理后的药品名formattedName
中。 - 对于其余字符,我们使用
tolower
函数将其转换为小写,并添加到formattedName
中。
- 如果当前字符是第一个字符并且是字母,我们使用
- 函数返回整理后的药品名
formattedName
。 - 在
main
函数中,我们首先读取药品名的数量 n n n。 - 然后,我们定义一个字符串数组
drugNames
,用于存储整理后的药品名。 - 使用
cin.ignore()
忽略换行符,以便正确读取之后的输入。 - 接下来,我们使用一个循环读取 n n n 个药品名,对于每个药品名:
- 使用
getline
函数读取一行输入的药品名。 - 调用
formatDrugName
函数对药品名进行整理,并将结果存储在drugNames
数组中。
- 使用
- 最后,我们使用另一个循环逐行输出整理后的药品名。
这道题目主要考察字符串的处理和大小写转换。通过使用 toupper
和 tolower
函数,我们可以方便地将字符转换为大写或小写。同时,需要注意第一个字符的特殊处理,以满足题目要求。