在C语言中,将字符串转换为大写通常需要遍历字符串的每个字符,并使用标准库函数 toupper() 来转换,以下是几种实现方式:

(图片来源网络,侵删)
方法1:使用标准库函数 toupper()(推荐)
<ctype.h> 中的 toupper() 函数可以将小写字母转换为大写字母,非字母字符保持不变。
示例代码
#include <stdio.h>
#include <ctype.h> // 包含 toupper() 函数
#include <string.h> // 包含 strlen() 函数
void to_uppercase(char *str) {
for (int i = 0; str[i] != '\0'; i++) {
str[i] = toupper((unsigned char)str[i]);
}
}
int main() {
char text[] = "Hello, World! 123";
printf("原始字符串: %s\n", text);
to_uppercase(text);
printf("转换后字符串: %s\n", text);
return 0;
}
输出:
原始字符串: Hello, World! 123
转换后字符串: HELLO, WORLD! 123
关键点
toupper()的参数必须是unsigned char或EOF,否则某些编译器可能会发出警告,我们强制转换为(unsigned char)。- 直接修改原字符串(
str[i] = toupper(...)),而不是创建新字符串。
方法2:创建新字符串(不修改原字符串)
如果不想修改原字符串,可以创建一个新的字符串存储转换后的结果。
示例代码
#include <stdio.h>
#include <ctype.h>
#include <string.h>
void to_uppercase_copy(const char *src, char *dest) {
for (int i = 0; src[i] != '\0'; i++) {
dest[i] = toupper((unsigned char)src[i]);
}
dest[strlen(src)] = '\0'; // 确保新字符串以 '\0'
}
int main() {
char original[] = "Test String";
char upper[100]; // 确保足够大
printf("原始字符串: %s\n", original);
to_uppercase_copy(original, upper);
printf("转换后字符串: %s\n", upper);
return 0;
}
输出:

(图片来源网络,侵删)
原始字符串: Test String
转换后字符串: TEST STRING
方法3:使用指针遍历(更高效)
可以用指针代替数组索引,使代码更简洁。
示例代码
#include <stdio.h>
#include <ctype.h>
void to_uppercase_ptr(char *str) {
while (*str) {
*str = toupper((unsigned char)*str);
str++;
}
}
int main() {
char text[] = "pointer method";
printf("原始字符串: %s\n", text);
to_uppercase_ptr(text);
printf("转换后字符串: %s\n", text);
return 0;
}
输出:
原始字符串: pointer method
转换后字符串: POINTER METHOD
| 方法 | 特点 | 适用场景 |
|---|---|---|
toupper() 直接修改 |
简单、高效,但会修改原字符串 | 适用于不需要保留原字符串的情况 |
| 创建新字符串 | 不修改原字符串,但需要额外空间 | 适用于需要保留原字符串的情况 |
| 指针遍历 | 代码更简洁,效率高 | 适用于熟悉指针操作的开发者 |
推荐使用方法1(toupper() 直接修改),除非有特殊需求需要保留原字符串。

(图片来源网络,侵删)
