wint_t和wchar_t区别&putwchar()&iswalpha()&iswcntrl()&iswdigit()&iswpunct()

wint_t和wchar_t区别&putwchar()&iswalpha()&iswcntrl()&iswdigit()&iswpunct()wint_t(足以容纳所有宽字符的整数类型)wint_t是一个通过typedef定义的整数类型,并且足够大,能够容纳所有有效的wchar_t类型的宽字符,以及一个WEOF(wideendoffile–宽字符版的文件结

wint_t和wchar_t区别&putwchar()&iswalpha()&iswcntrl()&iswdigit()&iswpunct()"

wint_t (足以容纳所有宽字符的整数类型)

wint_t是一个通过typedef定义的整数类型,并且足够大,能够容纳所有有效的wchar_t类型的宽字符,以及一个WEOF(wide end of file–宽字符版的文件结束符),wint_t的长度必须>=wchar_t。
WEOF是EOF的宽字符版本
WEOF是一个宏,展开后是一个wint_t类型常量,WEOF值不能和字符集中任何一个字符的值重合,所以它通常都是负数,各种标准库在实现时通常将WEOF定义为-1。

  • EOF: c语言标准规定应该是负值,但对于WEOF,c语言并没规定必须是负值,只是不可以和字符集中任何一个字符重合,所以WEOF不仅可以实现为负数,还可以实现为一个很大的正数,(只是实现为负数比较方便且容易理解)。

WEOF还可以表示一个无效的宽字符

  • <wctype.h> 头文件中包含了很多与宽字符处理有关的函数,它们接受一个win_t类型的参数,除了可以给它们传递一个正常的宽字符,还可以传递一个 WEOF,也就是无效的宽字符。
  • <wchar.h> 头文件中包含了很多与文件读写有关的函数,一旦读取到文件末尾,或者写入失败,这些函数往往就会返回 WEOF。
    WEOF 在 <wctype.h> 和 <wchar.h> 头文件中都有定义,它们的含义是相同的。

<wctype.h> 和 <wchar.h> 头文件中包含了很多与宽字符处理有关的函数,其中有相当一部分函数的参数类型和返回值类型都是 wint_t。

  • 大部分标准库将wint_t实现为int或者short。

· 在定义宽字符时使用wchar_t类型,将宽字符传递给函数时转换为wint_t类型。

#include <stdio.h>
#include <wchar.h>
#include <wctype.h>
int main ()
{ 
   
    int i = 0;
    wchar_t c = L'A';  //定义单个宽字符 L表示该字符为宽字符long一个字符为2字节(L很重要)
    wchar_t str[] = L"C语言 Java Python\n";  //定义宽字符串
   
    //将大写字母转换为小写字母输出
    if(iswupper(c)) c = towlower(c);
    putwchar(c);
    putwchar(L'\n');
   
    //只输出字母和空白符
    while(str[i])
    { 
   
        if(iswalpha(str[i]) || iswspace(str[i])) putwchar(str[i]);
        i++;
    }
    return 0;
}
  • 运行结果:
a
C Java Python

1. putwchar()函数将一个宽字符写入标准输出。wint_t putwchar(wchar_t ch)

  • parameter: 该函数接受一个强制性参数ch,指定要写入的宽字符
  • **return:**成功时返回ch表示的宽字符;写入错误时返回WEOF并设置错误指示符

2. iswalpha()函数判断一个宽字符是否是字母。int iswalpha(wint_t wc)

如果一个宽字符被 iswupper() 或者 iswlower() 检测后返回“真”,那么它一定会被 iswalpha() 判定为字母。

  • iswalpha() 是 isalpha()(位于<ctype.h>中)的宽字符版本:如果参数 wc 能够被 wctob() 转换为单个字节的形式,并且转换后的字符使用 isalpha() 检测返回“真”(非零值),那么 iswalpha() 也一定会将 wc 判定为字母。
  • parameter: wc为要检测的宽字符。它可以是一个有效的宽字符(被转换为 wint_t 类型),也可以是 WEOF(表示无效的宽字符)。
  • **return:**返回值为非零(真)表示wc是字母,返回值为零(假)表示wc不是字母。
    不同地区的字母定义可能不同,字符不一定只代表英文字母(a,b,c,d...),在“简体中文”环境下,西里尔文、希腊文等都将成为字母,并且可以区分大小写。
    可以通过setlocale()函数改变程序的地域设置,让程序使用不同的字符集,从而之支持不同的语言文化。
    在默认的地域设置(“C”)中,C语言通常使用ASCII编码,能很好的支持英文。在其他地域设置中,可能会使用GBK-简体中文,GIB5-繁体中文,Shift-JIS–日文,Unicode-世界统一码。

3. iswspace()函数判断一个宽字符是否是空白符 int iswspace (wint_t wc)

  • iswspace() 是 isspace()(位于<ctype.h>中)的宽字符版本:如果参数 wc 能够被 wctob() 转换为单个字节的形式,并且转换后的字符使用 isspace() 检测返回“真”(非零值),那么 iswspace() 也一定会将 wc 判定为空白符。
  • parameter: wc是要检测的宽字符。它可以是一个有效的宽字符(被转换为 wint_t 类型),也可以是 WEOF(表示无效的宽字符)。
  • return: 返回值为非零(真)表示wc是空白符,返回值为零(假)表示wc不是空白符。

4. iswcntrl()函数判断一个宽字符是否是控制字符int iswcntrl (wint_t wc)

“控制字符”是指那些具有某种特殊功能、不会显示在屏幕上、不会占用字符位置的特殊字符。
“控制字符”是指那些具有某种特殊功能、不会显示在屏幕上、不会占用字符位置的特殊字符。

  • iswcntrl() 是 iscntrl()(位于<ctype.h>中)的宽字符版本:如果参数 wc 能够被 wctob() 转换为单个字节的形式,并且转换后的字符使用 iscntrl() 检测返回“真”(非零值),那么 iswcntrl() 也一定会将 wc 判定为控制字符。
  • parameter: wc是要检测的宽字符。它可以是一个有效的宽字符(被转换为 wint_t 类型),也可以是 WEOF(表示无效的宽字符)。
  • return: 返回值为非零(真)表示wc是控制字符,返回值为零(假)表示wc不是控制字符。

5. iswdigit()函数判断一个宽字符是否是十进制数字 int iswdigit (wint_t wc)

  • iswdigit() 是 isdigit()(位于<ctype.h>中)的宽字符版本:如果参数 wc 能够被 == wctob() ==转换为单个字节的形式,并且转换后的字符使用 isdigit() 检测返回“真”(非零值),那么 iswdigit() 也一定会将 wc 判定为十进制数字。
  • parameter: wc是要检测的宽字符。它可以是一个有效的宽字符(被转换为 wint_t 类型),也可以是 WEOF(表示无效的宽字符)。
  • return: 返回值为非零(真)表示wc是十进制数字,返回值为零(假)表示wc不是十进制数字。

6. iswpunct()函数判断一个宽字符是否是标点符号int iswpunct (wint_t wc)

标点符号必须是图形字符(iswgraph() 返回“真”),但不能是字母,也不能是数字(iswalnum() 返回“假”)。

  • iswpunct() 是 ispunct()(位于<ctype.h>中)的宽字符版本:如果参数 wc 能够被 wctob() 转换为单个字节的形式,并且转换后的字符使用 ispunct() 检测返回“真”(非零值),那么 iswpunct() 也一定会将 wc 判定为标点符号。
  • parameter: wc是要检测的宽字符。它可以是一个有效的宽字符(被转换为 wint_t 类型),也可以是 WEOF(表示无效的宽字符)。
  • return: 返回值为非零(真)表示wc是标点符号,返回值为零(假)表示wc不是标点符号。

今天的文章wint_t和wchar_t区别&putwchar()&iswalpha()&iswcntrl()&iswdigit()&iswpunct()分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/87200.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注