C ispunct() 函数

C ispunct() 语法

ispunct() 是 C 语言 <ctype.h> 标准库的一个函数,用于判断字符是否为标点符号。这里的标点符号指的是:在可打印字符中,除了字母和数字以外的字符,并且不包括空格

语法:

ispunct(c)

说明:

ispunct() 函数接收单个参数。

  • c (int):是一个字符。虽然是 int 类型,但它的值必须能够表示为一个 unsigned char,或者等于 EOF。

ispunct() 函数会返回一个 int 类型的值,来表示判断结果。

  • 如果参数 c 是一个标点符号的字符(即可打印、非字母数字、非空格),则返回一个非零值(表示 “真”)。
  • 否则,返回 0(表示 “假”)。

提示:

  • ispunct 是 “is punctuation” 的简写。
  • ispunct() 可以被看成是 isgraph() 的一个子集。即 isgraph() 为 “真” 的字符中,排除 isalnum() 为真和 isspace() 为真的字符,剩下的通常就是 ispunct() 为 “真” 的字符(在默认 "C" 区域设置下)。

C ispunct() 摘要

使用频率
修改字符串
官方文档 查看

C ispunct() 示例

接下来,我们通过几个简单的例子来讲解一下 C ispunct() 函数是如何使用的。

示例 1:ispunct() 判断常见的标点符号

#include <stdio.h>
#include <ctype.h>

int main(void)
{
    char ch1 = ',';
    char ch2 = '.';
    char ch3 = '?';
    char ch4 = '!';

    if (ispunct(ch1)) {
        printf("'%c' 是标点符号。\n", ch1);
    } else {
        printf("'%c' 不是标点符号。\n", ch1);
    }

    if (ispunct(ch2)) {
        printf("'%c' 是标点符号。\n", ch2);
    } else {
        printf("'%c' 不是标点符号。\n", ch2);
    }

    if (ispunct(ch3)) {
        printf("'%c' 是标点符号。\n", ch3);
    } else {
        printf("'%c' 不是标点符号。\n", ch3);
    }

    if (ispunct(ch4)) {
        printf("'%c' 是标点符号。\n", ch4);
    } else {
        printf("'%c' 不是标点符号。\n", ch4);
    }

    return 0;
}

运行结果如下。

',' 是标点符号。
'.' 是标点符号。
'?' 是标点符号。
'!' 是标点符号。

分析:

如果参数是标点符号字符(比如逗号、句号、问号、感叹号等),则 ispunct() 会返回一个非零值(表示 “真”)。

示例 2:ispunct() 判断非标点符号字符

#include <stdio.h>
#include <ctype.h>

int main(void)
{
    char ch1 = 'A';
    char ch2 = '6';
    char ch3 = ' ';        // 空格
    char ch4 = '\n';       // 换行符 (控制字符)

    if (ispunct(ch1)) {
        printf("'%c' 是标点符号。\n", ch1);
    } else {
        printf("'%c' 不是标点符号。\n", ch1);
    }

    if (ispunct(ch2)) {
        printf("'%c' 是标点符号。\n", ch2);
    } else {
        printf("'%c' 不是标点符号。\n", ch2);
    }

    if (ispunct(ch3)) {
        printf("'%c' (空格) 是标点符号。\n", ch3);
    } else {
        printf("'%c' (空格) 不是标点符号。\n", ch3);
    }

    if (ispunct(ch4)) {
        printf("'\\n' (换行符) 是标点符号。\n");
    } else {
        printf("'\\n' (换行符) 不是标点符号。\n");
    }

    return 0;
}

运行结果如下。

'A' 不是标点符号。
'6' 不是标点符号。
' ' (空格) 不是标点符号。
'\n' (换行符) 不是标点符号。

分析:

如果参数是字母、数字、空格、控制符等字符,则 ispunct() 会返回 0(表示 “假”)。

示例 3:ispunct() 在字符串中查找标点符号

#include <stdio.h>
#include <ctype.h>

int main(void)
{
    char str[] = "你好,绿叶!How are you?";

    for (int i = 0; str[i] != '\0'; i++) {
        if (ispunct((unsigned char)str[i])) {
            printf("%c ", str[i]);
        }
    }

    return 0;
}

运行结果如下(取决于系统对中文字符的编码和处理)。

?

分析:

在大多数英文系统中,ispunct() 只会识别英文标点符号,而不会识别中文标点符号。

示例 4:ispunct() 处理 EOF

#include <stdio.h>
#include <ctype.h>

int main(void)
{
    int result;

    result = ispunct(EOF);
    printf("%d\n", result);

    return 0;
}

运行结果如下。

0

分析:

如果 ispunct() 的参数是 EOF,那么它会返回 0。

深入了解 ispunct()

ispunct() 函数的行为会受到当前区域设置 (locale) 的影响。在默认的 "C" 区域设置下,它会将 ASCII 值 在 33-47、58-64、91-96、123-126 范围内的字符识别为标点符号。这些范围包含了大多数常见的英文标点符号和一些特殊字符。在其他区域设置下,可能会根据该区域设置的定义将其他字符也视为标点符号。

ispunct() 的定义是:可打印字符中,除了字母和数字以外的字符,并且不包括空格。我们也可以通过组合其他字符分类函数来实现相同的逻辑,比如 (isprint(c) && !isalnum(c) && !isspace(c))。

需要注意的是,虽然 ispunct() 的参数 c 写的是 int 类型,但我们必须传入一个字符(比如 'a'、'B' 等),或者输入特殊的 EOF 值(常用于文件结束判断)。如果传入一个负数(除了 EOF),则可能会导致未定义行为。

上一篇: iscntrl()

下一篇: C <string.h> 标准库

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号