什么是 isupper()?
isupper() 是 C 标准库中的一个函数,用于检查一个给定的字符是否为大写字母。

(图片来源网络,侵删)
- 如果字符是大写字母('A' 到 'Z'),函数返回一个非零值(在大多数实现中是
1)。 - 如果字符不是大写字母(小写字母、数字、标点符号、空格等),函数返回
0。
头文件
要使用 isupper() 函数,你必须包含 <ctype.h> 头文件。
#include <ctype.h>
函数原型
isupper() 的函数原型如下:
int isupper(int c);
参数说明:
c:要检查的字符,它被定义为int类型,但通常我们传入一个char类型的值,当传入char时,它会自动被提升为int。
返回值说明:

(图片来源网络,侵删)
- 非零值 (真):
c是一个大写字母 (A-Z)。 - 零 (假):
c不是大写字母。
使用示例
下面是一个简单的示例,演示如何使用 isupper() 函数。
#include <stdio.h>
#include <ctype.h> // 必须包含此头文件
int main() {
char ch1 = 'A';
char ch2 = 'b';
char ch3 = '7';
char ch4 = '$';
// 检查 ch1
if (isupper(ch1)) {
printf("'%c' 是一个大写字母,\n", ch1); // 会执行
} else {
printf("'%c' 不是一个 大写字母,\n", ch1);
}
// 检查 ch2
if (isupper(ch2)) {
printf("'%c' 是一个大写字母,\n", ch2);
} else {
printf("'%c' 不是一个 大写字母,\n", ch2); // 会执行
}
// 检查 ch3
if (isupper(ch3)) {
printf("'%c' 是一个大写字母,\n", ch3);
} else {
printf("'%c' 不是一个 大写字母,\n", ch3); // 会执行
}
// 检查 ch4
if (isupper(ch4)) {
printf("'%c' 是一个大写字母,\n", ch4);
} else {
printf("'%c' 不是一个 大写字母,\n", ch4); // 会执行
}
return 0;
}
输出结果:
'A' 是一个大写字母。
'b' 不是一个 大写字母。
'7' 不是一个 大写字母。
'$' 不是一个 大写字母。
常见应用场景
isupper() 通常用于需要判断字符类型的场景,
示例1:统计字符串中的大写字母数量
#include <stdio.h>
#include <ctype.h>
int main() {
char str[] = "Hello World! 123";
int count = 0;
for (int i = 0; str[i] != '\0'; i++) {
if (isupper(str[i])) {
count++;
}
}
printf("字符串 \"%s\" 中有 %d 个大写字母,\n", str, count);
return 0;
}
输出结果:

(图片来源网络,侵删)
字符串 "Hello World! 123" 中有 2 个大写字母。
示例2:将小写字母转换为大写字母(逻辑演示)
虽然 C 语言有专门的 toupper() 函数来做这件事,但我们可以用 isupper() 来理解其逻辑。
#include <stdio.h>
#include <ctype.h>
int main() {
char str[] = "This is a Test String.";
for (int i = 0; str[i] != '\0'; i++) {
// 如果是小写字母,则转换为大写
// if (str[i] >= 'a' && str[i] <= 'z') { // 也可以这样判断
if (!isupper(str[i]) && str[i] >= 'a' && str[i] <= 'z') {
str[i] = str[i] - ('a' - 'A'); // 手动转换
}
}
printf("转换后的字符串: %s\n", str);
return 0;
}
输出结果:
转换后的字符串: THIS IS A TEST STRING.
注意:在实际编程中,请直接使用
toupper()函数,因为它更简洁、更安全、更具可移植性。
isupper() vs. isupper_l()
isupper():使用程序的当前区域设置(locale)来定义什么是大写字母,在不同的语言环境中(土耳其语),大写字母的定义可能有所不同。isupper_l():是isupper()的一个版本,它接受一个locale_t对象作为参数,允许你指定要使用的区域设置,而不是使用当前的全局区域设置。
对于大多数简单的英语程序,isupper() 就足够了。
相关函数
isupper() 属于 C 字符分类函数家族,其他常用的函数包括:
| 函数 | 功能 |
|---|---|
islower(c) |
检查 c 是否为小写字母 (a-z) |
isalpha(c) |
检查 c 是否为字母 (a-z, A-Z) |
isdigit(c) |
检查 c 是否为数字 (0-9) |
isalnum(c) |
检查 c 是否为字母或数字 |
isspace(c) |
检查 c 是否为空白字符 (空格, \t, \n, \r, \v, \f) |
ispunct(c) |
检查 c 是否为标点符号 |
isxdigit(c) |
检查 c 是否为十六进制数字 (0-9, a-f, A-F) |
toupper(c) |
c 是小写字母,则转换为大写字母 |
tolower(c) |
c 是大写字母,则转换为小写字母 |
- 用途:判断一个字符是否为大写字母。
- 头文件:
<ctype.h>。 - 返回值:真(非零)或假(零)。
- 注意:它只检查字符,不检查字符串,要处理字符串,需要循环遍历其中的每个字符。
- 最佳实践:在进行字符分类时,优先使用这些标准库函数,而不是自己用
>=和<=来比较,因为它们更清晰、更健壮,并且能更好地处理国际化字符。
