【深基6.例1】自动修正
题目描述
大家都知道一些办公软件有自动将字母转换为大写的功能。输入一个长度不超过 $100$ 且不包括空格的字符串。要求将该字符串中的所有小写字母变成大写字母并输出。
输入格式
输入一行,一个字符串。
输出格式
输出一个字符串,即将原字符串中的所有小写字母转化为大写字母。
样例 1
样例输入 1
Luogu4!
样例输出 1
LUOGU4!
思路分析
本题要求将输入的字符串中所有小写字母转换为大写字母,其他字符保持不变并输出。解题思路主要分为以下几个步骤:
-
输入字符串:首先,通过标准输入(如
cin
)读取一行字符串,存入字符数组a
中。 -
遍历字符串:使用循环遍历字符串中的每一个字符。循环的边界条件是通过
strlen(a)
函数得到的字符串长度,但这种方式在循环内部多次调用strlen(a)
是不高效的,因为strlen
函数每次都会从头开始计算字符串的长度。更好的做法是在循环前计算一次长度并存储在变量中。 -
转换小写为大写:在遍历过程中,检查当前字符是否为小写字母(即字符的ASCII码值是否在
'a'
到'z'
之间)。如果是,则通过ASCII码值转换的方式将其转换为对应的大写字母。ASCII码中,大写字母和小写字母之间相差32('A' - 'a' = 32
),因此,将小写字母转换为大写字母可以通过char(a[i] - 'a' + 'A')
实现,或者直接通过toupper(a[i])
函数(需要包含头文件<cctype>
)来实现。 -
输出转换后的字符:对于每个字符,无论是原样输出还是转换后的大写形式,都通过标准输出(如
cout
)输出。
示例代码
#include<bits/stdc++.h> // 包含标准库头文件,但通常不推荐在竞赛或实际项目中使用bits/stdc++.h
using namespace std;
int main() {
char a[10000]; // 定义字符数组a,用于存储输入的字符串,注意题目要求长度不超过100,这里定义10000是为了避免输入长度限制导致的错误
cin >> a; // 从标准输入读取一行字符串到数组a中
int len = strlen(a); // 计算字符串a的长度,并存储在变量len中以提高效率
for(int i = 0; i < len; i++) { // 使用计算好的长度len进行循环遍历
if(a[i] >= 'a' && a[i] <= 'z') { // 检查当前字符a[i]是否为小写字母
cout << char(a[i] - 'a' + 'A'); // 如果是,则转换为大写字母并输出
} else {
cout << a[i]; // 如果不是小写字母,则直接输出原字符
}
}
return 0; // 程序正常结束
}