当前位置: 首页 > news >正文

安全认证的机票网站成就怎么做山东省住房和城乡建设厅政务服务

安全认证的机票网站成就怎么做,山东省住房和城乡建设厅政务服务,怎样建立网站ip地址,有人打电话说请我做网站 骗子Hi,铁子们好呀#xff01;今天博主来给大家更一篇C语言的字符函数和字符串函数~ 具体讲的内容如下#xff1a; 文章目录 #x1f386;1.字符分类函数#x1f4af;#x1f4af;⏩1.1 什么是字符分类函数的#xff1f;#x1f4af;#x1f4af;⏩1.2 字符函数的类型有哪… Hi,铁子们好呀今天博主来给大家更一篇C语言的字符函数和字符串函数~ 具体讲的内容如下 文章目录 1.字符分类函数⏩1.1 什么是字符分类函数的⏩1.2 字符函数的类型有哪些⏩1.3 字符函数islower介绍及模拟实现⏩1.3.1islower函数具体介绍⏩1.3.2islower函数代码实现及效果 ⏩1.4字符分类函数练习 2.字符转换函数⏩2.1代码实现 3.strlen的使用和模拟实现⏩3.1strlen函数的使用⏩3.1.1 strlen函数相关练习 ⏩3.2 strlen函数三种模拟实现⏩3.2.1 创建临时变量count⏩ 3.2.2 指针-指针⏩ 3.2.3 递归法求字符串长度 4.strcpy的使用和模拟实现⏩4.1 strcpy的使用规则⏩4.2 strcpy函数的基本使用⏩4.3 strcpy函数的模拟实现⏩4.3.1 strcpy函数的模拟实现方法1 5.strcat的使用和模拟实现⏩5.0.1 strcat函数简单介绍⏩5.0.1.1什么是strcat函数呢函数原型是什么 ⏩5.1 strcat的使用规则⏩5.2 strcat的使用和模拟实现⏩ 5.2.1strcat的使用⏩ 5.2.2 strcat的模拟实现 前言 在编程的过程中我们经常要处理字符和字符串C语言标准库中提供了一系列库函数接下来我们就学习一下这些函数。 1.字符分类函数 ⏩1.1 什么是字符分类函数的 众所周知C语言中提供了一系列的字符函数这些字符函数专门做字符分类的。 通俗点来讲 这些函数就是判断这个字符是属于什么类型的字符的。 需要注意的是 这些字符函数都需要包含头文件#includectype.h。 ⏩1.2 字符函数的类型有哪些 如下图所示 从图中我们发现这些函数的使用方法其实非常类似我们这里就讲一个字符函数islower吧其他函数的实现方法也是跟这个比较类似~ ⏩1.3 字符函数islower介绍及模拟实现 islower函数原型如下 int islower(int c);⏩1.3.1islower函数具体介绍 如下两图所示 分析 从这两幅图我们可以看出islower是判断它的函数参数部分的c是否为小写字母的。 我们可以通过返回值来说明是否是小写字母如果是小写字母就返回非0的整数如果不是小写字母则返回0。 ⏩1.3.2islower函数代码实现及效果 代码如下 #include stdio.h #include ctype.h int main() {int ret islower(C);printf(%d\n, ret);return 0; }从动图中 我们直观地看出如果islower函数的参数部分是小写字母返回的是非0的数字。如果参数部分是大写字母或者其他类型的字符则返回0。 好讲到这里相信同学们就知道字符分类函数怎么用了大家可以下去尝试一下多实践~ ⏩1.4字符分类函数练习 练习 写一个代码将字符串中的小写字母转大写其他字符不变。 那这道题我们应该怎么思考呢 我们来看下图 我们来看下面的Ascll码值可以看出大写字母A和B的Ascll码值分别为65和66小写字母a和b的Ascll码值分别为97和98。 所以我们可以得出一个结论 大写和小写的Ascll码值分别相差32。 当我们知道这个结论这题就很好做了,我们可以先创建一个字符数组用islower函数遍历每一个字符如果是小写字母就让它的ASCLL码值-32即可。 当我们把题目分析成这样代码自然可以顺理成章地写出来。 #include stdio.h #include ctype.h int main() {int i 0;char str[] Test String.;while (str[i]) {if (islower(str[i])) {str[i] - 32;}i;}printf(%s\n, str);return 0; }这里我们要提醒一下:我们知道\0是字符串的结束标志所以当while循环中的str[i]为\0时也就是为假这是为什么呢 如下图 我么可以看出\0对应的ASCLL码值为0那0为假便跳出while循环然后我们再来看printf部分它这里是以%s的形式打印那以%s本质上就是从那个地址开始往后打印字符串直到遇到\0为止。而这里的str恰好是数组名我们之前就在这篇文章C语言-指针讲解2讲过数组名是数组首元素的地址。所以这里本质上就是从arr首字符地址开始打印直到遇到\0为止。 2.字符转换函数 C语言提供了2个字符转换函数 它们的函数原型如下 1 int tolower ( int c ); //将参数传进去的大写字母转小写 2 int toupper ( int c ); //将参数传进去的小写字母转大写上面我们写的代码将小写字母转换为大写是ASCLL码值-32完成的效果。但有了转换函数就可以直接使用tolower函数。 ⏩2.1代码实现 #include stdio.h #include ctype.h int main() {int i 0;char str[] Test String.;while (str[i]) {if (islower(str[i])) //判断该字符是否为小写字母{str[i] toupper(str[i]);//将对应字符的小写字母转换为大写字母}i;}printf(%s\n,str);//从str的首元素地址开始打印字符串直到遇到\0为止。return 0; }vs运行效果图 3.strlen的使用和模拟实现 它的函数原型如下: size_t strlen( const char*str)strlen的函数使用规则如下: 字符串以\0作为结束标志strlen函数返回到是在字符串中\0前面出现的字符个数(不包含\0)。参数指向的字符串必须要以\0结束。注意函数的返回值为size_t是无符号的(易错)strlen的使用需要包含头文件#includestring.h ⏩3.1strlen函数的使用 好这里首先讲一下strlen函数的基本使用 代码如下 #includestdio.h #includestring.h int main() {char arr[] abcdef;//字符串是以\0为结束标志的printf(%zd\n, strlen(arr));//这里因为strlen函数是size_t类型所以最好用%zd打印以防vs弹出警告//需要注意的是strlen函数计算的是\0之前的字符个数return 0; }相信同学们看了上面的代码以及注释应该能够理解代码的逻辑。 VS运行效果 ⏩3.1.1 strlen函数相关练习 刚刚我们讲到了要注意strlen函数的返回值为size_t,这是为什么呢下面我们来看一下这个代码案例。 代码如下 #include stdio.h #include string.h int main() {const char* str1 abcdef;const char* str2 bbb;if (strlen(str2) - strlen(str1) 0) {printf(str2str1\n);}else {printf(str1str2\n);}return 0; }这道题想必很多同学是这么想: 由于那个str1和str2数组存放的是字符串首字符的地址那strlen函数就是计算\0之前的字符个数。 那他们肯定觉得strlen函数计算str2数组的字符个数为3个str1数组的字符个数为6个。所以肯定会认为strlen(str2)-strlen(str1)那个语句就是3-6-3,是0。 那肯定会打印str1str2这句话。那这是不对的。 我们不妨先用VS测试这个代码看看运行效果是怎么样先~ 我们发现它确实执行else语句那句话为什么呢别急接下来博主给你娓娓道来 因为本质上那个strlen函数计算字符串的相加相减都本质上都是无符号的整数的减法 那它们相减得出的数也是无符号整数的肯定也会大于0。这是为什么呢 看下图 相信同学们看了这个图也能够理解更加理解这个无符号整数的意思。 因为无符号整数就是不会考虑符号位只是关注数值位。并且无符号整数是使用该数的二进制补码来存储。因此它的数肯定是大于0的。 好相信同学们听到这里也会理解这个代码的逻辑了~ 那如果说我们真想让代码执行str1str2\n那句话该怎么做呢 我们可以这么做将strlen这个函数无符号size_t类型强制转换为int整型那这样就可以打印str2str1\n那句话。 VS代码运行效果 通过执行结果我们发现程序的确执行str1str2那句话。 好相信讲到这里同学们应该就理解了。那我们接着就讲三种模拟实现strlen函数~ ⏩3.2 strlen函数三种模拟实现 ⏩3.2.1 创建临时变量count 代码如下 #include stdio.h #include stdio.h size_t my_strlen(char* s)//这里我们函数my_strlen类型写成size_t这是因为字符串的长度绝对是大于0等于0的因此我们直接就写成size_t类型就行{int count 0;//创建临时变量count,初始化为0while (*s)//当*s\0,\0对应的ASCLL码值为00为假便跳出while循环。{count;//随着变量字符指针s往后遍历count变量的值不断自增s;//字符指针往后遍历}return count; }int main() {char str[] abcdef;size_t ret my_strlen(str);//这里我们是将str首元素地址传过去printf(%zd\n, ret);//因为这是用size_t数据类型创建的变量ret,所以我们使用%zd来格式化输出。return 0; }相信同学们看了这个代码以及这个注释是能够理解这个代码逻辑的。 VS运行效果如下 ⏩ 3.2.2 指针-指针 代码如下 #include stdio.h #include stdio.h size_t my_strlen(char* s)//这里我们函数my_strlen类型写成size_t这是因为字符串的长度绝对是大于0等于0的因此我们直接就写成size_t类型就行 {char* ptr s;//这里是将字符串首元素地址赋给指针变量ptrwhile (*s)s;//只要*s不是\0*s都往后遍历return s - ptr;//这里本质上把字符指针s最后的地址-ptr首元素的地址这样就能得到两个指针相差的元素个数。 } int main() {char str[] abcdef;size_t ret my_strlen(str);//这里我们是将str首元素地址传过去printf(%zd\n, ret);//因为这是用size_t数据类型创建的变量ret,所以我们使用%zd来格式化输出。return 0; }相信同学们看了这个代码以及这个注释是能够理解这个代码逻辑的。 VS运行效果如下 ⏩ 3.2.3 递归法求字符串长度 这里的递归法求字符串长度估计很多同学比较懵我们先画个图分析先 如下 相信同学们看了这个图自己应该能够很好地理解递归这个方法大家可以自己尝试自己用递归法实现这个算法~ 要是还想不出来博主这里直接上代码~ 代码如下 #include stdio.h #include stdio.h size_t my_strlen(char* s)//这里我们函数my_strlen类型写成size_t这是因为字符串的长度绝对是大于0等于0的因此我们直接就写成size_t类型就行 {if (*s \0) {return 0;//当*s指向的元素为\0直接返回0用作递归的结束条件}else {return 1 my_strlen(s 1);//如果*s指向的元素不是\0那么说明字符串里面的字符最少都有1个因此我们就返回1后面字符串中字符的长度。}}int main() {char str[] abcdef;size_t ret my_strlen(str);//这里我们是将str首元素地址传过去printf(%zd\n, ret);//因为这是用size_t数据类型创建的变量ret,所以我们使用%zd来格式化输出。return 0; }这里博主这里简单画了递归调用图大家可以看一下理解理解~ VS运行效果图如下 我们发现用递归法实现的算法它的结果也是6。 4.strcpy的使用和模拟实现 strcpy它的函数原型如下 char* strcpy(char * destination, const char * source );这里我们来解读一下这里destination指的是目标位置的起始地址source指的是所要拷贝那个字符串内容的起始地址。 好我们就细细地讲一下它的规则吧~ ⏩4.1 strcpy的使用规则 源字符串必须以’\0’结束。会将源字符串中的’\0’拷贝到目标空间。目标空间必须足够大以确保能存放源字符串目标空间必须可修改 好当我们介绍了strcpy的规则后接下来博主将给大家讲解strcpy的模拟实现。 ⏩4.2 strcpy函数的基本使用 好接下来博主给大家演示一下strcpy函数的基本使用。 代码如下 #includestdio.h #includestring.h int main() {char arr1[] abcdef;//这里的arr1数组是默认有\0的因为字符串是以\0为结束标志的。char arr2[20];//这里初始化arr2数组的长度务必要确保目标内存区域足够大以容纳源字符串否则会造成数组越界strcpy(arr2, arr1);//这里的strcpy库函数拷贝会顺便拷贝\0printf(%s\n, arr2);//这里打印是从arr2的首元素地址开始逐一打印字符串直到遇到\0才停止。return 0; }相信大家看了博主写的代码以及注释,自己应该能够理解这个代码的逻辑。 VS运行效果如下 ⏩4.3 strcpy函数的模拟实现 这里可能很多同学是有点没思路的没事博主这里会提供思路让大家能够深刻地理解strcpy是怎么模拟实现的~ ⏩4.3.1 strcpy函数的模拟实现方法1 首先来看下图 分析 这里我们主要是通过数组遍历的方式来逐一拷贝,因为\0作为字符串的结束标志。所以只要arr1数组的内容不是\0,就在while循环内部逐一进行拷贝每拷贝一个字符两个指针都向后偏移一个元素。 直到遇到\0为止。最后当arr1指向的内容为\0条件为假便跳出while循环。最后我们再把arr1的内容拷到arr2中就行。 好当我们分析成这样代码也能顺理成章地写出来。 代码如下 //}#includestdio.h void my_strcpy(const char* src, char* dest)//*src指向的是arr1数组首元素的地址*dest指向的是arr2数组首元素的地址 {while (*src)//当*src指向的元素是\0,则表达式为假便跳出while循环{*dest *src;//将src字符串的内容一个一个地拷贝到dest中。dest;//指针往后遍历src;//指针往后遍历}*dest *src;//由于之前因为*src指向的元素是\0,所以跳出while循环那因为\0是字符串的结束标志之前我们没有把\0拷贝到指针变量dest中所以这里就要把\0拷到dest。 }int main() {char arr1[] abcdef;char arr2[20];my_strcpy(arr1,arr2);//调用my_strcpy函数把arr1作为源地址将arr2作为作为目标地址printf(%s\n, arr2);//这里以%s打印实质上是拿到arr2首元素的地址,逐一往后打印字符串直到遇到\0为止return 0; } 相信同学们看了这个代码应该是能够理解这个代码的逻辑。 vs运行效果 但是我们认为这个代码还是有待改进的接下来博主将细细讲一下。 首先我们先打开官网查一下这个函数先。 如图 从图中我们可以看出函数返回值是char*类型的并且我们发现它返回的是目标字符指针的起始地址属于我们要创建个指针变量来充当destinmation的起始地址到时直接返回这个指针变量即可。 如下 题目分析 //------1.参数顺序------ //函数的功能停止条件 //3.assert判断字符串是否为空指针assert函数头文件为:#includeassert.h //4.用const修饰源指针使其内容不得修改 //5.函数返回值 char* 那同学们可以根据博主上面的改进代码分析可以自己尝试改进上面的代码。一会我们会进行讲解~ 好如果大家看了上面的改进代码分析还是想不到思路的话可以看一下博主的代码以及注释自己尝试理解消化一下。 代码如下 #includestdio.h #incldueassert.h char* my_strcpy(const char* src, char* dest) //arr1,arr2 {assert(src!NULL);//用assert断言一下分别判断src和dest是否都为空指针assert(dest!NULL);char* ret dest;//创建个指针变量ret,将src字符指针首元素的地址赋给指针变量retwhile (*dest*src)//这里首先是先对dest字符指针和src字符指针解引用将src字符赋给dest然后两个字符指针意思是说两个字符指针统一向后偏移一个元素直到src字符指针指向的元素为\0,那也就是整个表达式结果就为\0即为假则跳出while循环。{;}return ret;//这里返回的是dest首元素的地址 }int main() {char arr1[] abcdef;char arr2[20];//创建这个arr2数组要比arr1数组空间要大创建小了如果源字符串的长度还比arr2数组还大拷贝会造成数组越界my_strcpy(arr1, arr2);//调用my_strcpy函数把arr1作为源地址将arr2作为作为目标地址printf(%s\n, arr2);//这里以%s打印实质上是拿到arr2首元素的地址,逐一往后打印字符串直到遇到\0为止return 0; }这个代码有个地方写得很好就是while (*dest*src)这句话为什么呢 因为这里既能做到把arr1数组的内容全部拷贝到数组arr2同时也能做到当*src\0的时候表达式为假便跳出while循环。 顺便提一下 这个题目是出自高质量C/C编程》书籍最后的试题部分。 对了如果同学们想要这本书的电子版可以私信博主领取我私发给大家 5.strcat的使用和模拟实现 ⏩5.0.1 strcat函数简单介绍 ⏩5.0.1.1什么是strcat函数呢函数原型是什么 strcat函数是C语言中的一个字符串拼接函数它的功能是在一个字符串后面追加上另外一个字符串。 它的函数原型如下 char * strcat ( char * destination, const char * source );具体函数介绍如下 从图中 和我们之前介绍的strcpy函数一样返回的类型都是char*,然后它返回到也是字符指针destination的地址。 同时我们需要注意的是 strcat函数在拼接字符串的时候会自动在合成字符串的末尾添加\0。 ⏩5.1 strcat的使用规则 源字符串必须以’\0’结束。目标字符串中也得有\0,否则没办法也不知道追加从哪里开始。目标空间必须有足够的大能容纳源字符串的内容。目标空间必须可修改。 ⏩5.2 strcat的使用和模拟实现 ⏩ 5.2.1strcat的使用 好接下来给大家演示一下strcat是怎么用的大家可以看一下下面的代码~ 代码如下 #includestdio.h #includestring.h int main() {char arr1[20] hello ;char arr2[] world;strcat(arr1,arr2);//这里实质上是将arr2数组里面的内容拼接到arr1数组中顺便带上\0。printf(%s\n, arr1);return 0; }这里如果同学们看了代码还是不太理解它strcat函数的如何进行拼接的话不要紧~ 博主刚刚对那个代码进行调试了一下动图如下所示 细心的话 我们从动图可以看出原本数组arr1的内容中的空格字符后面是跟着一个\0的但是经过strcat函数的拷贝后那个\0就给覆盖掉了。 另外当strcpy函数把arr2全部内容都拷到arr1数组中会自动在arr1合成字符串中添加一个\0字符。 那我们根据这个动图分析 自然也能将这个图给画出来如下 所以它本质上还是用arr2数组中的w字符将\0给覆盖掉在拼接后的字符串完的后面添加一个\0,以此作为字符串的结束标志。 相信同学们看了这个图应该是能够大彻大悟的~ 那博主接下来再用VS执行一下这个代码看看分析得是否正确吧~ VS运行效果 从运行结果来 我们的分析是正确的确实是把hellow world这个字符串给打印出来。 接下来我们就讲一下那个strcat函数的模大家拟实现吧~ ⏩ 5.2.2 strcat的模拟实现 这里可能也会有同学对于strcat不知道如何自己模拟实现别急博主分析一下你们就懂啦~ 这里是我们实现strcat函数的步骤 如下图所示 相信同学们看了这幅图自己也许有点思路了但是有些同学可能还是不太懂怎么实现这个算法。 那么博主这里就自己动手实践写了这个代码并且写了详细的注释希望同学们能够理解~ 代码如下 #includestdio.h #includestring.h #includeassert.h char* my_strcat(const char*src,char*dest) //用const修饰源字符串src以免被修改 {assert(src ! NULL);assert(dest ! NULL);//判断两个字符串是否为空指针//assert(src dest);//assert断言写成这样也行因为NULL的值就为0,只要左右两边任意一个表达式0都是为假的char* ret dest;//创建临时指针变量ret来接收dest的起始地址while (*dest) //找到dest字符串的\0的位置{dest;//逐一开始往后遍历字符串dest}while (*dest*src);//将src字符串的内容逐一拷贝到直到遇到\0时拷贝完成后整个表达式为假直接跳出while语句return ret; }int main() {char arr1[20] hello ;char arr2[] world;char*tmpmy_strcat(arr2,arr1);//这里我们用tmp字符指针变量来接受返回的dest起始地址printf(%s\n, tmp);//这里的话主要是用arr1首元素的地址开始打印字符串直到遇到\0才停止。return 0; }代码分析 相信同学们看了博主写的代码以及注释应该能够理解这个代码逻辑的那接下来我们提一下有个代码是有改进之处的我们发现那个my_strcat函数中的assert断言是可以改写成assert(src dest)。 或许有同学不理解我们来解释一下~ 如图 我们发现那个空指针NULL是为0的。而因为之前我们讲逻辑与操作符的时候但凡左右一侧为0,那整个表达式都为假。 好解释了那么多我们不妨用VS测试一下我们的代码看看它的运行结果是否符合我们的预期把~ VS运行效果如下 我们发现VS运行结果确实是符合我们预期的就说明我们这个模拟实现strcat函数的代码逻辑上是没错的。 好今天的内容我们暂时就讲到这里希望大家好好吸收这篇博客中介绍的函数下去多去用这些函数这样才能学会的~ 当然博主这次讲的字符函数和字符串函数(一仅仅只是一小部分后续博主会更深层地介绍其他C语言字符和字符串函数,大家就敬请期待吧~ **好讲到这里如果大家觉得这篇博客有哪些内容讲得还不太懂可以私信一下博主我会给你讲明白。 ** ** 如果觉得博主不错的话欢迎一键三连支持一下博主谢谢大家**
http://www.pierceye.com/news/629214/

相关文章:

  • 海口网站建设方案咨询信息流优化师面试常见问题
  • 网上课程网站wordpress自定义页面分页
  • 自建站成本深圳网站建设营销服务平台
  • 模仿网站怎么做网站编辑建设
  • 湖南做网站 磐石网络引领免费网上开店
  • wordpress内容做成目录seo排名分析
  • 大型网站 网站建设做网站赔了8万
  • python官方网站建设网站要什么
  • 青海 网站开发 图灵如何创建自己的网页
  • 建设银行网站怎么登陆不做网站首页的尺寸
  • 谁能给我一个网站谢谢dedecms收费怎么办
  • dede 网站地图 模块青岛做网站服务商
  • 征信网站开发扬州市建设局网站
  • 教育网站建设 飞沐软件定制公司值得去吗
  • 金耀网站建设网站制作景观建筑人才网
  • 仿《爱美眉》网站 dede门户网站的主要功能
  • 外发加工网站深圳如何优化
  • 做设计在哪个网站上找高清图片大全网站建设风险分析
  • 做兼职哪个网站好哪些网站做免费送东西的广告6
  • 网站建设战略互动模板wordpress
  • 三原网站建设网易企业邮箱登录v
  • 为网站营销好处wordpress tar.xz
  • wordpress建站比较淘宝客网站怎么建设
  • 网站结构有哪些安徽省建设工程信息网官方网站
  • 如何查看网站是否备案直播网站怎么做啊
  • 广西做网站的公司投资融资理财网站模板
  • 做网站的颜色游戏推广员拉人犯法吗
  • 金融审核网站制作站长之家网址ip查询
  • 石家庄做家教网站网络营销网站建设
  • 怎么做淘宝网站赚钱吗怎样提高百度推广排名