望牛墩做网站,linkcat wordpress,com域名免费,高端网站建设网站建设设计思路本章概述 字符分类函数字符转换函数strlen的使用和模拟实现strcpy的使用和模拟实现strcat的使用和模拟实现strcmp的使用和模拟实现彩蛋时刻#xff01;#xff01;#xff01; 字符分类函数
字符#xff1a; 这个概念#xff0c;我们在以前的文章中讲过了。我们键盘输入的… 本章概述 字符分类函数字符转换函数strlen的使用和模拟实现strcpy的使用和模拟实现strcat的使用和模拟实现strcmp的使用和模拟实现彩蛋时刻 字符分类函数
字符 这个概念我们在以前的文章中讲过了。我们键盘输入的信息都是字符。字符大体可以分为两类——单个字符字符串。而单个字符又可以进行分类——字母字符数字字符特殊字符和不可见字符。进行思维图展示 在日常生活中我们写的字符也就是随便写比如123abc……。但在C语言中为了识别出字符和字符串我们就要用两个操作符—— 和 。 是用来识别单个字符的 是用来识别字符串的。 我们对于所写的字符我们人都能识别出来。A我们能识别它是大写a我们能识别它是小写1我们能识别它是数字。但是计算机是无法识别出来的所以为了能够让计算机识别我们就创建了字符分类函数。我们进行展示 它们的头文件是ctype.h,当条件为真时就会返回大于0的数值反之返回小于0的数值。这些字符分类函数的用法都是相同所以我们举一个就行了常用的比如islower判断是否小写的函数。我们先来看它的类型和参数
// int islower (int c)进行代码展示
#define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
#include ctype.h
int main()
{int c islower(a);int b islower(A);if (c 0)printf(%c是小写\n, a);elseprintf(%c是大写\n, a);if (b 0)printf(%c是小写\n, A);elseprintf(%c是大写\n, A);return 0;
}
结果运行图 对于其它字符分类函数的使用大家可以点击连接进行学习使用https://cplusplus.com/reference/clibrary/
字符转换函数
C语言中就俩字符转换函数它们的头文件是 ctype.h,如下
// 大写转小写int tolower int c
// 小写转大写int toupper (int c)进行代码展示
#define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
#include ctype.h
#include string.h
int main()
{int c toupper(a); //转大写printf(%c\n, c);int b tolower(A); //转小写printf(%c\n, b);return 0;
}
结果运行图 我们来写个程序运用我们所学的知识
// 我们写一句英文然后把我们所写的英文全部转换为大写比如
// I am a student.------- I AM A STUDENT.
// 我们来写两个方法进行实现。程序【1】
#define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
#include ctype.h
#include string.h
int main()
{char arr[] I am a student.;int sz sizeof(arr) / sizeof(arr[0]);int i 0;printf(转换前%s\n, arr);for (i 0; i sz; i){if (islower(arr[i]))arr[i] arr[i] - 32; //大写字母的AS||值比小写字母的AS||值少32}printf(转换后%s\n,arr);return 0;
}
结果运行图 程序【2】。
#define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
#include ctype.h
int main()
{char arr[] I am a student.;int sz sizeof(arr) / sizeof(arr[0]);int i 0;printf(转换前%s\n, arr);for (i 0; i sz; i){if(islower(arr[i]))arr[i]toupper(arr[i]); //使用 toupper进行转换}printf(转换后%s\n,arr);return 0;
}
结果运行图 大家也可以进行举一反三比如大写转小写代码。
strlen的使用和模拟实现
strlen的使用后面我们要开始讲字符串相关的函数了它们的头文件string.h。前面咱们已经讲过了strlen的使用和模拟实现今天在复习一下。我们知道每个字符串后面都会自动补\0,strlen统计的是\0之前的字符串的长度。进行代码展示:
#define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
#include string.h
int main()
{char arr[] abcdef;printf(%zd, strlen(arr));return 0;
}
结果运行图 对于strlen的返回值打印最好要用%zd。因为strlen的返回值类型为size_t无符号整形关于为什么是size_t的类型咱们在以前的文章中讲过了。 我们还可以指定它的统计起始位置进行代码展示下面展示一些 内联代码片。
#define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
#include string.h
int main()
{char arr[] abcdef;printf(%zd, strlen(arr1)); //从b开始进行统计所以统计数为5.return 0;
}结果运行图展示
strlen的模拟
// 咱们写三种方法进行实现。
// 思路统计\0之前的字符数。方法【1】----计数器的方式
#define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
#include string.h
size_t my_strlen(char arr[])
{int count 0;int i 0;while (arr[i]){count;i;}return count;
}
int main()
{char arr[] abcdef;printf(%zd\n, my_strlen(arr));return 0;
}
结果运行图 方法【2】----指针-指针
#define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
#include string.h
size_t my_strlen(char arr[])
{char*s1arr;while (*arr){arr;}return arr-s1;
}
int main()
{char arr[] abcdef;printf(%zd\n, my_strlen(arr));return 0;
}
结果运行图: 方法【3】----递归函数 进行如图所示的逻辑
#define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
#include string.h
size_t my_strlen(char arr[])
{if (*arr){arr;return 1 my_strlen(arr);}elsereturn 0;}
int main()
{char arr[] abcdef;printf(%zd\n, my_strlen(arr));return 0;
}
结果运行图 在这三种方法都很好都是使用了我们所学过的知识大家要掌握。
strcpy的使用和模拟实现
strcpy的使用 具有拷贝字符串的功能。比如A字符串拷向B字符串B字符串拷向A字符串自己向自己拷贝。 我们来看它的结构组成
// char * strncpy ( char * destination, const char * source );| | || | || | |
返回的是des的地址未更改前的 目的地的地址 拷贝源的地址// 因为我们不想拷贝来源的时候发生更改所以用const修饰。它的使用有几个要注意的点 1.拷贝的来源必须以 \0结尾。2.dest的空间要足够大要容的下要拷贝的内容。3.des的空间是要可修改的要不然就无法拷贝。4 .拷贝的时候也会把source的 \0拷贝过去。5.拷贝的起始位置是可以指定的des和source都可以指定起始位置指定的方式和strlen一样 进行代码展示
#define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
#include string.h
int main()
{char arr[] abcedf;char arr1[30]{0};printf(拷贝前arr1:%s\n,arr1);printf(拷贝后arr1:%s\n, strcpy(arr1, arr));return 0;
}
结果运行图
strcpy的模拟实现
// 遇到source的 \0就会拷贝停止但也要把 \0拷贝过去进行代码展示
#define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
#include string.h
#include assert.h
char* my_strcpy(char* des, const char* str)
{char* p des; //因为经过后面的程序后des的值早变了所以要先给cpy一份assert(des str); //判断一下des和str是否为空指针while (*des*str){;}return p;
}
int main()
{char arr[] abcedf;char arr1[30] {0};printf(拷贝前arr1:%s\n,arr1);printf(拷贝后arr1:%s\n, my_strcpy(arr1, arr));return 0;
}
结果运行图
strcat的使用和模拟实现
strcat的使用它具有在字符串的后面补上别的字符串的功能。比如
// char arr[30]abd ;
// char arr1[4]acd ;
// arr1向arr的末尾补齐-------abdacd它的结构所示
// char * strcat(char *dest, const char*src)
// 返回值和每个参数的意思和strcpy是一样的它的使用要注意的点 1.src会找到des的第一个出现的 \0在此处把src的字符串补充到des中此时的’ \0’会被覆盖。2 .由于des的’ \0’被覆盖了所以str在补充字符串后会在末尾添加’\0’。占别人的东西最后肯定要还的3.des的空间要够大要容得下补充后的字符空间。4 .补充的起始位置是可以指定的des和str都可以指定起始位置指定的方式和strlen一样 进行代码展示:
#define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
#include string.h
#include assert.h
int main()
{char arr[30] abcdef;char arr1[] xxx;printf(%s\n, strcat(arr, arr1));return 0;
}
结果运行图
strcat的模拟实现思路我们要找到des的’\0’ 才能进行补充。进行代码展示
#define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
#include string.h
#include assert.h
char* my_strcat(char* des, const char* str)
{char* p des;assert(des str);while (*des)des;while (*des*str){;}return p;
}
int main()
{char arr[30] abcdef;char arr1[] xxx;printf(%s\n, my_strcat(arr, arr1));return 0;
}
结果运行图
strcmp的使用和模拟实现
strcmp的使用是用来比较字符串的大小的。它比较的可不是两个字符串的长度大小比较的是每单个字符的大小就是比较两个单个字符的AS||值的大小。结构组成如下
// int strcmp (const char * str1, const char * str2)要注意的几点 1.比较的顺序就是所输入的数据比如输入顺序str1 ,str2。 比较顺序str1 ,str2。 输入顺序str2 ,str1。 比较顺序str2 ,str1。2 .str1 str2就会返回大于0的数值。str1str2就会返回小于0的值。str1str2就会返回0。3.因为我们要比较两个字符串的大小所比较的内容不能被更改所以参数要用const修饰。4 .比较的起始位置是可以指定的str1和str2都可以指定起始位置指定的方式和strlen一样 进行代码展示
#define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
#include string.h
#include assert.h
int main()
{char arr[30] abcdef;char arr1[] abx;printf(%d\n, strcmp(arr, arr1));return 0;
}
结果运行图 大家可自行试一下对于和等于的代码。
strcmp的模拟实现比较的AS||值的大小进行代码展示
#define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
#include assert.h
#include string.h
int my_strcmp(const char* e1, const char* e2)
{while (*e1 *e2){e1;e2;if (*e1 \0 || *e2 \0)break;}return *(int*)e1 - *(int*)e2;
}
int main()
{char arr[30] abcdef;char arr1[] abx;printf(%d\n, my_strcmp(arr, arr1));return 0;
}
结果运行图
彩蛋时刻
https://www.bilibili.com/video/BV1Ze4y1F7CV/?spm_id_from333.337.search-card.all.click 每章一句总有人翘首以盼为你而来。感谢你能看到这里点赞关注收藏转发是对我最大的鼓励咱们下期间