ctype.h头文件的API的学习

ctype.h头文件的API的学习。<ctype.h>头文件声明了多个用于字符分类和字符映射的函数。在这些函数中,参数均为一个int类型整数,其值可用unsigned char类型表示或者等于宏EOF。如果参数具有其它值,函数行为是未定义的。<ctype.h>头文件中声明的函数会受当前语言环境的影响。“C”语言环境是所有C程序默认的语言环境。

实现环境: window11,  VS2017

<ctype.h>头文件中声明的函数具体如下:

函数(function):
字符分类函数:

isalnum检查字符是否为字母或者十进制数字字符的函数。
isalpha检查字符是否为字母的函数。
isblank检查字符是否为空白字符的函数。
iscntrl检查字符是否为控制字符的函数。
isdigit检查字符是否为十进制数字字符的函数。
isgraph检查字符是否为打印字符(空格符' '除外)的函数。
islower检查字符是否为小写字母的函数。
isprint检查字符是否为打印字符(包括空格符' ')的函数。
ispunct检查字符是否为标点符号的函数。
isspace检查字符是否为空格字符的函数。
isupper检查字符是否为大写字母的函数。
isxdigit检查字符是否为十六进制数字字符的函数。

字符大小写映射函数:

tolower将大写字母转换成小写字母的函数。
toupper将小写字母转换成大写字母的函数。

示例代码:

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


int main(void)
{
	int i = 0;
	int count = 0;
	const char str[] = "The year 2049 marks the centenary of the People's Republic of China.";
	//isalnum 	检查字符是否为字母或者十进制数字字符的函数。
	while (str[i])
	{
		if (isalnum(str[i]))
			++count;
		++i;
	}
	printf("The number of alphanumeric characters: %d\n", count);

	
	//isalpha 	检查字符是否为字母的函数。
	int i2 = 0;
	int count2 = 0;    //计数器,统计字母数量。
	const char str2[] = "I am a slow walker, but I never walk backwards.";
	while (str2[i2])
	{
		if (isalpha(str[i2]))
			++count2;
		++i2;
	}
	printf("There are %d alphabets in the sentence.", count2);

	//isblank 	检查字符是否为空白字符的函数。
	int i3 = 0;
	const char str3[] = "Truth never fears investigation.";
	while (str3[i3])
	{
		if (isalnum(str3[i3]))
			putchar(str3[i3]);
		if (isblank(str3[i3]))
			putchar('\n');
		++i3;
	}

	//iscntrl 	检查字符是否为控制字符的函数。
	int i4 = 0;
	int count4 = 0;    //计数器,统计控制字符数量。
	const char str4[] = "I am a slow walker,\n but I never walk backwards.\n";
	while (str4[i4])
	{
		if (iscntrl(str4[i4]))
			++count4;
		++i4;
	}
	printf("There are %d control characters in the sentence.", count4);

	//isdigit 	检查字符是否为十进制数字字符的函数。
	int i5 = 0;
	const char str5[] = "The year 2049 marks the centenary of the People's Republic of China.";
	puts("Decimal-digit characters in the sentence:");
	while (str5[i5])
	{
		if (isdigit(str5[i5]))
		{
			putchar(str5[i5]);
			putchar('\n');
		}
		++i5;
	}

	//isgraph 	检查字符是否为打印字符(空格符' '除外)的函数。
	int i6 = 0;
	int count6 = 0;    //计数器,统计打印字符(空格符除外)的数量。
	const char str6[] = "I am a slow walker, but I never walk backwards.";
	while (str6[i6])
	{
		if (isgraph(str6[i6]))
			++count6;
		++i6;
	}
	printf("There are %d printing characters except space in the sentence.\n", count6);

	//islower 	检查字符是否为小写字母的函数。
	int i7 = 0;
	int count7 = 0;    //计数器,统计小写字母数。
	const char str7[] = "I am a slow walker, but I never walk backwards.";
	while (str7[i7])
	{
		if (islower(str7[i7]))
			++count7;
		++i7;
	}
	printf("There are %d lowercase letters in the sentence.\n", count7);

	//isprint 	检查字符是否为打印字符(包括空格符' ')的函数。
	int i8 = 0;
	int count8 = 0;    //计数器,统计打印字符(包括空格符' ')的数量。
	const char str8[] = "I am a slow walker, but I never walk backwards.";
	while (str8[i8])
	{
		if (isprint(str8[i8]))
			++count8;
		++i8;
	}
	printf("There are %d printing characters including space in the sentence.\n", count8);

	//ispunct 	检查字符是否为标点符号的函数。
	int i9 = 0;
	int count9 = 0;    //计数器,统计标点符号数量。
	const char str9[] = "I am a slow walker, but I never walk backwards.";
	while (str9[i9])
	{
		if (ispunct(str9[i9]))
			++count9;
		++i9;
	}
	printf("There are %d punctuation characters in the sentence.\n", count9);

	//isspace 	检查字符是否为空格字符的函数。
	int i10 = 0;
	const char str10[] = "It is never too late to learn.";
	while (str10[i10])
	{
		if (isalnum(str10[i10]))
			putchar(str10[i10]);
		if (isspace(str10[i10]))
			putchar('\n');

		++i10;
	}

	//isupper 	检查字符是否为大写字母的函数。
	int i11 = 0;
	int count11 = 0;    //计数器,统计大写字母数量。
	const char str11[] = "I am a slow walker, but I never walk backwards.";
	while (str11[i11])
	{
		if (isupper(str11[i11]))
			++count11;
		++i11;
	}
	printf("There are %d uppercase letters in the sentence.\n", count11);

	//isxdigit 	检查字符是否为十六进制数字字符的函数。
	int i12 = 0;
	const char str12[] = "key moments in 100 years";
	puts("Hexadecimal-digit characters in the sentence:");
	while (str12[i12])
	{
		if (isxdigit(str12[i12]))
		{
			putchar(str12[i12]);
			putchar(' ');
		}
		++i12;
	}
	putchar('\n');

	//tolower 	将大写字母转换成小写字母的函数。
	int i13 = 0;
	const char str13[] = "WWW.STANDARDS.WIKI";
	while (str13[i13])
	{
		putchar(tolower(str13[i13++]));
	}
	putchar('\n');

	//toupper 	将小写字母转换成大写字母的函数。
	int i14 = 0;
	const char str14[] = "www.standards.wiki";
	while (str14[i14])
	{
		putchar(toupper(str14[i14++]));
	}
	putchar('\n');

	return 0;
}

运行结果:

参考:

https://www.standards.wiki/c/c_library_ctype.html
https://zh.cppreference.com/w/cpp/header/cctype
https://cplusplus.com/reference/cctype/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android SDK开发包国内官网下载地址.pdf 不知道是因为最近kaihui还是怎么的,打开android sdk官方网站特别的慢,想下载最新版本的platform几乎变成不可能完成的任务,不知道为什么Google不像Apache那样在各国设立镜像站。为了预防今后再出现这样的情况,这次干脆把android开发所需要的各种包总结一下,顺便提供本地下载链接,省得以后找起来麻烦。 通过分析SDK Manager里要用到的repository文件,我下载了目前google提供的各类安卓开发包并上传到了网盘。由于网盘有CDN支持,即使不用迅雷,下载速度依然很快。如果你从官网下载很慢,不妨试试这些国内链接。 注1、有些包分操作系统版本,例如windows版、macos版和linux版,下载时注意文件名里的标识。 注2、此帖长期更新,若有未及时更新的版本或失效链接,请留言通知主页君。 注2013/3/4:有一小部分下载链接失效,经查是由于未知原因被百度网盘禁止分享了,请过一段时间再试。 ADT Bundle 多合一下载包,里面包含了:sdk + 特定版本platform + eclipse + adt + 兼容包,解压缩即可使用。唯一的缺点是体积比较大,如果你是从零开始配Android开发环境就下载吧。(可惜官方提供的windows版是64位的eclipse,暂时没有32位版本,等有时间了我自己压一个。 Update2012/12/3: 官网已放出了32位版本) 文件名 文件大小 说明 其他下载地址 adt-bundle-17-windows-x86.zip 398.0M Android 4.2多合一开发包, Windows 32位。 官网 adt-bundle-17-windows-64bit.zip 398.0M Android 4.2多合一开发包, 注意所含eclipse是64位的。 官网 注:官网文件名不带版本号,应该对应“最新版”地址,下同。 adt-bundle-17-mac.zip 365.0M Mac OS 官网 adt-bundle-17-linux.zip 392.0M Linux 32位 官网 adt-bundle-linux-x86_64.zip Linux 64位 官网 假设你把sdk安装到d:\android-sdk,则里面的目录结构应该是这样的: d:\android-sdk\tools 这个目录里有ddms.bat等文件 d:\android-sdk\system-images\android-17\armeabi-v7a 这个目录里有userdata.img等文件(r14及以上才有这个目录) d:\android-sdk\platforms\android-4.0.2 这个目录里有android.jar等文件 d:\android-sdk\platform-tools 这个目录里有adb.exe等文件 d:\android-sdk\extras 这个目录里有android等目录 当你下载下面列出的部件时,也请参考上面的目录结构示例将内容放在正确的位置。 Android SDK SDK就是开发包,里面包含了两大类命令行工具:一类是SDK Tools,如android.bat、ddms.bat和emulator.exe等等,这些命令位于\tools目录,但运行仿真器所需的rom并不包含在内;另一类是Platform Tools,包含了如adb.exe、aidl.exe、aapt.exe等等命令,它们位于\platform-tools目录。 请区别清这几个名称:SDKSDK Tools、Platform Tools、Platform Package。 文件名 文件大小 说明 其他下载地址 installer_r21-windows.exe 73.9M 官方推荐下载这个安装包,是32位的 官网 android-sdk_r21-windows.zip 94.5M 文件名里虽然是"sdk",其实不含platform-tools, 叫"sdk tools"更合适。 官网 android-sdk_r21-macosx.zip 62.7M 官网 android-sdk_r21-linux.tgz 87.1M 官网 SDK安装/解压缩后,只具有基本的功能,还无法开始进行开发。你还需要platform-tools和至少一个platform package才算完整。在eclipse里通过SDK Manager是可以在线安装的,但有时手动安装也许更快。 文件名 文件大小 说明 其他下载地址 platform-tools_r14-linux.zip 10.4M 将platform-tools目录解压到sdk所在目录 官网 platform-tools_r14-macosx.zip 10.8M 官网 platform-tools_r14-windows.zip 10.6M 官网 假如你已经安装过android sdk,想单独升级tools,可以从下面的文件中选择所需要的压缩包下载,然后替换掉sdk目录下的对应子目录。 文件名 文件大小 说明 其他下载地址 tools_r20.0.3-linux.zip 78.8M 和第一个表里的"sdk"相比,只少了avd manager和sdk manager。 建议仅在需要升级时下载,用tools目录替换原来的同名目录。 官网 tools_r20.0.3-macosx.zip 55.5M 官网 tools_r20.0.3-windows.zip 86.0M 官网 ADT ADT(Android Development Tools)是一个Eclipse插件,如果没有这个插件,我们开发Android应用就得不停在命令行里敲各种命令,除非你是记事本开发狂人,否则还是老老实实享受ADT带来的方便吧。至于Eclipse本身可以去eclipse.org下载,这里就不再提供了。 文件名 文件大小 说明 其他下载地址 ADT-21.0.0.zip 12.9M 官网 ADT-20.0.3.zip 11.8M 官网 ADT-12.0.0.zip 5.4M 如果你不习惯新版的ADT,这个版本也许适合你。 官网 ADT的版本号基本上是跟着SDK Tools走,即每出一个新版本的SDK Tools,就出一个同样版本的ADT。不过实际使用中,即使是老版本的ADT也能对新版SDK支持得不错。 Platforms Android系统版本从1.0到写这篇帖子时的4.2,大大小小已经经历了10多个版本,每个版本发布时Google都会提供一个sdk platform package供开发者使用。一般这个压缩包是在Eclipse开发环境里用SDK Manager来下载的,但在国内选择这种方式会很痛苦,因为每个platform都有几十上百兆大,装一个就得几个小时,好像还不能断点续传(?)。 在国内,更方便的做法是先下载离线包,然后解压缩到android sdk的安装目录下,重启Eclipse后就会自动识别出来。 文件名 文件大小 说明 其他下载地址 android-17_r01.zip 45.6M Android 4.2 官网 sysimg_armv7a-17_r01.zip 111.0M 仅仿真器rom 官网 android-16_r03.zip 45.7M Android 4.1, 4.1.1, JELLY_BEAN 官网 sysimg_armv7a-16_r03.zip 107.0M 仅仿真器rom 官网 android-15_r03.zip 42.3M Android 4.0.3, 4.0.4, ICE_CREAM_SANDWICH_MR1 官网 sysimg_armv7a-15_r02.zip 91.7M 仅仿真器rom 官网 android-14_r03.zip 43.7M Android 4.0, 4.0.1, 4.0.2, ICE_CREAM_SANDWICH 官网 sysimg_armv7a-14_r02.zip 95.0M 仅仿真器rom 官网 android-3.2_r01-linux.zip 103.0M API Level 13, HONEYCOMB_MR2 文件名虽然有linux但其实是平台无关的,下同,直至2.1。 官网 android-3.1_r03-linux.zip 101.0M API Level 12, HONEYCOMB_MR1 官网 android-3.0_r02-linux.zip 99.6M API Level 11, HONEYCOMB 官网 android-2.3.3_r02-linux.zip 81.5M API Level 10, GINGERBREAD_MR1 官网 android-2.3.1_r02-linux.zip 75.0M API Level 9, GINGERBREAD 官网 android-2.2_r03-linux.zip 71.1M API Level 8, FROYO 官网 android-2.1_r03-linux.zip 66.8M API Level 7, ECLAIR_MR1 官网 android-2.0_r01-windows.zip 72.7M API Level 5, ECLAIR 官网 android-2.0_r01-macosx.zip 71.4M 官网 android-2.0_r01-linux.zip 71.6M 官网 android-2.0.1_r01-windows.zip 76.6M API Level 6, ECLAIR_0_1 官网 android-2.0.1_r01-macosx.zip 75.3M 官网 android-2.0.1_r01-linux.zip 75.5M 官网 android-1.6_r03-windows.zip 61.6M API Level 4, DONUT 官网 android-1.6_r03-macosx.zip 59.5M 官网 android-1.6_r03-linux.zip 60.5M 官网 android-1.5_r04-windows.zip 52.0M API Level 3, CUPCAKE 官网 android-1.5_r04-macosx.zip 50.0M 官网 android-1.5_r04-linux.zip 50.8M 官网 android-1.1_r1-windows.zip 44.6M API Level 2 官网 android-1.1_r1-macosx.zip 43.4M 官网 android-1.1_r1-linux.zip 43.3M 官网 从Level 14开始,每个platform package都被分为两部分了,一部分包含这个版本下开发所需的jar包,例如android-16_r03.zip;另一部分是仿真器rom文件,例如sysimg_armv7a-16_r03.zip。最近的版本除了arm仿真器,还有x86仿真器可供下载(由intel提供),据说在x86电脑上运行能够大幅提速。如果你只在真机上调试代码,则不需要下载仿真器rom对应的文件。 更详细的Android版本对照表可以参考这里。 Documents 供Android开发参考用的官方文档,文件比较大。我习惯有一个本地的文档,然后配合Everything使用,非常方便,文档里有很多内容源码里是没有的。 文件名 文件大小 说明 其他下载地址 docs-17_r01.zip 163.0M 官网 docs-16_r03.zip 156.0M 官网 docs-15_r02.zip 126.0M 官网 docs-14_r01.zip 104.0M 官网 Sources 我比较懒,从来没有用git下载过android源代码,如果你想用git下载,可以参考这篇文章里的操作方法。 官方目前提供了一些源代码压缩包,如下表所列,这些压缩包可以attach到eclipse里方便随时F3查看;最重要的是,有了源代码以后,Eclipse里代码辅助出来的参数名再也不会是"arg0"、"arg1"这样的了。 文件名 文件大小 说明 其他下载地址 sources-17_r01.zip 18.0M 官网 sources-16_r02.zip 17.0M 官网 sources-15_r02.zip 15.7M 官网 sources-14_r01.zip 15.4M 官网 sources-8-froyo.zip 33.3M (非官方) 官网 sources_2.1.zip 30.0M (非官方) 官网 sources_1.6.zip 22.8M (非官方) 官网 Samples Google提供了丰富的开发示例,如果时间允许多看看这些例子代码和运行效果,对提升手机应用的设计开发能力肯定大有帮助。 文件名 文件大小 说明 其他下载地址 samples-17_r01.zip 14.1M 官网 samples-16_r01.zip 14.0M 官网 samples-15_r02.zip 15.6M 官网 samples-14_r02.zip 15.5M 官网 samples-3.2_r01-linux.zip 11.6M 官网 samples-3.1_r01-linux.zip 11.5M 官网 samples-3.0_r01-linux.zip 11.4M 官网 samples-2.3_r01-linux.zip 8.1M 官网 samples-2.3.3_r01-linux.zip 8.1M 官网 samples-2.2_r01-linux.zip 7.6M 官网 samples-2.1_r01-linux.zip 7.3M 官网 除了上面这些以外,还有AddOns和Supports等分类没来得及整理,等有时间了找一下。 以上内容随时补充更新,欢迎提醒和纠错。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值