企业 网站 制作,苏州谢谢网络公司,专业做农牧应聘的网站,箱包东莞网站建设欢迎来CILMY23的博客喔#xff0c;本期系列为【C语言】长篇详解#xff0c;字符系列篇1-----“混杂”的各种字符函数……#xff0c;图文讲解各种字符函数#xff0c;带大家更深刻理解C语言中各种字符函数的应用#xff0c;感谢观看#xff0c;支持的可以给个赞哇。 前言… 欢迎来CILMY23的博客喔本期系列为【C语言】长篇详解字符系列篇1-----“混杂”的各种字符函数……图文讲解各种字符函数带大家更深刻理解C语言中各种字符函数的应用感谢观看支持的可以给个赞哇。 前言 在C语言中我们常常碰见各种字符也需要对字符进行处理那C语言提供了一系列的库函数来帮助我们处理各种情况。字符函数有字符串函数字符分类函数还有字符转换函数…… 一、字符分类函数
C语言中有一系列的函数是专门做字符分类的也就是一个字符是属于什么类型的字符的。 这些函数的使用都需要包含一个头文件是ctype . h字符分类函数有以下这些
名称判断的字符1iscntrl任何控制字符2isspace空白字符:空格符 换页\ f换行‘\n’回车\r制表符‘\t’或者垂直制表符\v3isdigit十进制数字 0 ~94isxdigit 十六进制数字,包括所有十进制数字小写字符a~f,大写字母A~F5islower小写字母a~z6isupper大写字母A~Z7isalpha字母a~z或者A~Z8isalnum字母或者数字a~zA~Z0~99ispunct标点符号任何不属于数字或者字母的图形字符(可打印)10isgraph任何图形字符11isprint任何可打印字符包括图形字符和空白字符
以上这些函数都可以在cplusplus查找到cplusplus.com 接下来我们看一个函数islower其实这种分类函数都有一个特点它们是只有一个参数int c
它的意思是是这种字符就返回真不是就返回假。
这是islower的函数介绍 这是函数return value和例子
那我们具体看看这个函数的返回值吧
#includectype.h
#include stdio.hint main()
{int ret islower(a);printf(%d\n,ret);ret islower(b);printf(%d\n, ret);ret islower(z);printf(%d\n, ret);ret islower(Q);printf(%d\n, ret);return 0;}
我们可以看到结果如下所示 也就是我们通过返回值判断是否是小写字母如果是小写字母就返回非0的整数如果不是小写字母则返回 0。
实际运用情况需要判断一个字符数组中是否包含小写字母如果是则打印该小写字母
按照以往情况我们都需要用一个if语句写条件去判断但现在学了这个islower之后就可以简化我们的条件如下
#includectype.h
#include stdio.hint main()
{int i 0;char ch[] 12SilLmy23 ;while (ch[i]){//if(ch[i] a ch[i] z)if (islower(ch[i])){printf(%c , ch[i]);}i;}return 0;} 结果如下
这样的简化更有利于我们去阅读代码让代码更简洁点。同样如果是字母大小写转换我们同样可以用分类函数先分类后进行整数相加减的形式来把字母大小写转换。
二、字符转换函数 那碰到字母大小写转换呢C语言库函数又提供了两种字符转换函数
名称用途1int tolower( int c);大写字母转换成小写字母2int toupper( int c);小写字母转换成大写字母 我们来看以下例子
#includectype.h
#include stdio.hint main()
{int i 0;char ch[] 12SilLmy23 ;while (ch[i]){printf(%c ,tolower( ch[i]));i;}i 0;printf(\n);while (ch[i]){printf(%c , toupper(ch[i]));i;}return 0;}
结果 tolower将大写字母全都转换成了小写字母而toupper都将小写字母转换成了大写字母。 这就是C库函数提供的转换函数。
三、strlen的总结和模拟实现
strlen的模拟实现呢我们在指针系列篇讲过捏 http://t.csdnimg.cn/LF1Hl一、strlen的模拟实现
strlen
size_t strlen ( const char * str );
strlen它的功能是获取字符串的长度返回字符串的长度。那字符串的特点是在“”的末尾有一个\0所以我们可以采取计数的方式来统计字符串的长度。或者用指针减指针的方式模拟实现。其次我们要注意的是strlen它的返回类型是size_t。为什么要注意它的返回类型是size_t呢
我们看以下代码
#include stdio.h
#include string.hint main()
{char ch1[] CILmy23 ;char ch2[] CI;if ((strlen(ch2) - strlen(ch1) ) 0){printf( );}else{printf( );}return 0;}
本来我们所期待的结果是输出但是结果输出的却是 这是因为数据类型是无符号整型无论是负数还是正数都会被认为是 0的数如果我们将其数据类型搞成int类型就能输出 那在这里我也会重新展开详写strlen的几种实现方式。
第一种采用变量计数方式
size_t my_strlen(const char* str)
{assert(str);int len 0;while (*str ! \0){len;str;}return len;
}逻辑图如下所示 这是一种采用指针变量的形式来实现的我们通过一个变量记录下我们循环的次数循环的次数就是字符串的长度最后返回变量的值。 虽然图没有画但是走完循环后str是停在\0上的。
第二种不使用变量计数方式
size_t my_strlen(const char* str)
{assert(str);if (*str \0)return 0;elsereturn 1 my_strlen(str1);
}
这是一种采用递归的形式完成的省去变量但是计算大的字符串的时候效率可能会比较低下我们一般不采用这种形式。
第三种使用指针减去指针计数方式
size_t my_strlen(const char* str)
{assert(str);const char* tail str;while (*tail ! \0){tail;}return tail - str;
}逻辑图如下 这种方法思路应用比较多双指针变式也比较多。 总结 1.strlen的功能是求字符串长度,统计的是到\0 之前的字符长度 2.字符串的长度中必须要有\0 3.要注意strlen它的返回类型是size_t 4.使用记得包括头文件string.h 感谢各位同伴的支持本期字符函数篇1就讲解到这啦内容较少下期我们将从strcpy开始讲起如果你觉得写的不错的话可以给个赞若有不足欢迎各位在评论区讨论。