函数概述
isupper 是 C 标准库中的一个函数,用于检查一个给定的字符是否为大写字母。

(图片来源网络,侵删)
- 头文件: 为了使用
isupper函数,你需要包含<ctype.h>头文件。 - 函数原型:
int isupper(int c);
- 功能: 判断字符
c是否是 'A' 到 'Z' 之间的字母。 - 返回值:
c是一个大写字母,函数返回非零值(通常是1,但标准规定为非零,具体值可能因实现而异)。c不是大写字母,函数返回 0。
使用示例
下面是一个简单的例子,演示如何使用 isupper 函数。
#include <stdio.h>
#include <ctype.h> // 必须包含此头文件
int main() {
char ch1 = 'A';
char ch2 = 'z';
char ch3 = '5';
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' 是一个大写字母。
'z' 不是一个大写字母。
'5' 不是一个大写字母。
'$' 不是一个大写字母。
参数类型 int 的说明
你可能会注意到,isupper 的参数类型是 int,而不是 char,这是 C 语言标准库中字符函数的一个常见特点。
-
为什么是
int?
(图片来源网络,侵删)- 可传递
EOF:int类型可以容纳EOF(End-Of-File, 通常是 -1),这使得这些函数可以处理文件流的结束符。 - 符号扩展: 在某些系统上,
char类型可能是signed char(-128到127),当将一个char传递给一个期望int的函数时,char的最高位是1(即值为负数),会发生“符号扩展”,导致int的高位全部被填充为1,如果函数内部将这个int值当作一个无符号的字符值来处理(即只看低8位),结果就是正确的,将参数声明为int可以确保这种行为符合标准。
- 可传递
-
如何调用? 尽管参数是
int,但你仍然可以直接传入char类型的变量,C 语言会自动进行整数提升,将char转换为int。char c = 'G'; int result = isupper(c); // 完全正确,c 会被提升为 int
你也可以直接传入字符的字面量(会被自动视为
int):int result = isupper('H'); // 正确
与 isupper 相关的函数
isupper 属于一个庞大的字符分类函数家族,它们都在 <ctype.h> 中声明,这些函数的用法和返回值规则都类似。
| 函数名 | 功能 | 检查范围 |
|---|---|---|
isupper(c) |
是否为大写字母 | 'A' - 'Z' |
islower(c) |
是否为小写字母 | 'a' - 'z' |
isalpha(c) |
是否为字母 (大写或小写) | 'A'-'Z', 'a'-'z' |
isdigit(c) |
是否为十进制数字 | '0' - '9' |
isalnum(c) |
是否为字母或数字 | isalpha(c) \|\| isdigit(c) |
isspace(c) |
是否为空白字符 | ` (空格),\t\n\v\f\r` |
ispunct(c) |
是否为标点符号 | ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ { | } ~` |
isxdigit(c) |
是否为十六进制数字 | 0-9, A-F, a-f |
isprint(c) |
是否为可打印字符 | ` (空格) 到~` |
isgraph(c) |
是否为可打印字符(不含空格) | 到 |
iscntrl(c) |
是否为控制字符 | ASCII 0x00-0x1F 和 0x7F |
tolower(c) |
如果是大写字母,转换为小写 | - |
toupper(c) |
如果是小写字母,转换为大写 | - |
实际应用场景
isupper 函数在实际编程中非常常用,尤其是在处理文本输入时。

(图片来源网络,侵删)
示例:统计一行文本中的大写字母数量
#include <stdio.h>
#include <ctype.h>
int main() {
char str[100];
int uppercase_count = 0;
printf("请输入一行文本: ");
// 使用 fgets 安全地读取一行,包括空格
fgets(str, sizeof(str), stdin);
// 遍历字符串,直到遇到字符串结束符 '\0'
for (int i = 0; str[i] != '\0'; i++) {
// 检查当前字符是否是大写字母
if (isupper(str[i])) {
uppercase_count++;
}
}
printf("输入的文本中包含 %d 个大写字母,\n", uppercase_count);
return 0;
}
运行示例:
请输入一行文本: Hello World! This is a Test.
输入的文本中包含 5 个大写字母。
- 用途: 判断一个字符是否为大写字母。
- 头文件:
<ctype.h>。 - 返回值: 是大写字母返回非零,否则返回0。
- 注意: 参数是
int类型,但可以直接传入char或字符字面量。 - 核心思想:
isupper是字符分类函数家族的一员,是处理文本数据的基础工具。
