在 C 语言中,大小写字母之间的转换可以通过简单的 ASCII 值操作来实现。ASCII 表中大写字母 ‘A’ 到 ‘Z’ 的值是 65 至 90,而小写字母 ‘a’ 到 ‘z’ 的值是 97 至 122。它们之间相差 32。因此,要把小写字母转换成大写字母,我们需要从其 ASCII 值中减去 32;反之亦然。
下面是一个简单的 C 语言程序,它演示了如何把输入的小写字母转换成大写字母,并解释每一行代码的作用:
#include <stdio.h> // 包含标准输入输出库的头文件
int main() {
char ch; // 定义一个字符变量来存储输入的字母
printf("Enter a lowercase letter: "); // 提示用户输入一个小写字母
scanf("%c", &ch); // 从用户处读取一个字符
if (ch >= 'a' && ch <= 'z') {
// 如果输入的字符是小写字母
ch = ch - 'a' + 'A'; // 将其转换为大写字母
// 这里 'a' 和 'A' 是字符字面量,它们的 ASCII 值分别是 97 和 65
// 'a' 转换为 'A' 的操作等同于 ch = ch - 32;
printf("Uppercase letter: %c\n", ch); // 输出转换后的大写字母
} else {
// 如果输入的不是小写字母
printf("The entered character is not a lowercase letter.\n"); // 提示用户输入的不是小写字母
}
return 0; // 主函数的返回值,返回 0 表示程序执行成功
}
在这段代码中,我们使用了标准输入输出函数 printf
和 scanf
来与用户交互。首先程序提示用户输入一个小写字母,然后检查输入的字符是否为小写字母。如果是,程序将输入的小写字母通过减去 32 的 ASCII 值转换成大写字母,然后输出转换后的结果。如果输入的字符不在小写字母范围内,则程序会输出警示信息。
要注意的是,这段代码只能处理单个字母的转换。如果想要转换一个字符串中的每个小写字母为大写字母,需要使用循环结构来依次处理字符串中的每个字符。
当然,接下来我们可以扩展上面的例子,用一个循环来转换一个字符串中的所有小写字母为大写字母。以下代码示例中,我们将写一个函数来实现这一功能,并解释每一行代码:
#include <stdio.h> // 包含用于输入和输出的函数的标准库头文件
// 函数声明,用于转换字符串中的所有小写字母为大写
void convertToUpperCase(char str[]);
int main() {
char str[100]; // 定义一个字符数组(字符串),最大长度为 99 加上空终止符 '\0'
printf("Enter a string: "); // 提示用户输入一个字符串
fgets(str, sizeof(str), stdin); // 使用 fgets 函数读取一行输入,包括空格,并存储在 str 字符数组中
convertToUpperCase(str); // 调用函数以将字符串中的所有小写字母转换为大写
printf("String in uppercase: %s\n", str); // 输出转换后的大写字符串
return 0; // 主函数结束,返回 0 表示程序执行成功
}
// 定义convertToUpperCase函数,将传入的字符串中的小写字母转换为大写
void convertToUpperCase(char str[]) {
for (int i = 0; str[i] != '\0'; ++i) {
// 循环遍历字符串中的每个字符,直到遇到空终止符 '\0'
if (str[i] >= 'a' && str[i] <= 'z') {
// 如果当前字符是小写字母
str[i] = str[i] - 'a' + 'A'; // 将其转换为大写字母
// 同样是减去 32 的操作,这里使用 'a' 和 'A' 确保转换的通用性
// 对于 ASCII 编码,这也可以写作 str[i] -= 32;
}
}
// 由于我们是直接修改了 str 数组中的字符,所以没有返回值
}
在此代码中,我们定义了一个 convertToUpperCase()
函数,该函数接受一个字符串作为参数,并将该字符串中的所有小写字母转换为大写字母。主函数 main()
里首先读取用户输入的字符串,然后调用该函数,并打印出转换后的结果。
fgets()
函数用来读取一整行输入,直到遇到换行符或达到字符串的最大长度。需要指出的是,fgets()
将会将换行符也读取到字符串中,如果需要移除换行符,可以在转换函数中添加适当的代码。
convertToUpperCase()
函数通过遍历字符串中的每个字符,并检查它是否在 ‘a’ 和 ‘z’ 的 ASCII 码范围内。如果是,则将其转换为大写,这是通过从字符的 ASCII 值中减去 ‘a’ 和加上 ‘A’ 或直接减去 32 来实现的。这样,输入字符串中的每个小写字母都被转换成了相应的大写字母。