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 wide end of file 宽字符版的文件结束符 wint t 的长度必须 gt

大家好,我是讯享网,很高兴认识大家。

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不是标点符号。

小讯
上一篇 2025-01-09 22:40
下一篇 2025-01-15 22:30

相关推荐

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