西安高校网站建设定制网站建设,wordpress段落缩进,重庆的seo服务公司,山西建站字符函数与字符串函数#xff08;上#xff09; 文章目录 字符函数与字符串函数#xff08;上#xff09;1.字符分类函数2.字符转换函数3.strlen的使用和模拟实现3.1使用示例#xff1a;3.2模拟实现 4.strcpy的使用和模拟实现4.1使用示例:4.2模拟实现 5.strcat的使用和模拟…字符函数与字符串函数上 文章目录 字符函数与字符串函数上1.字符分类函数2.字符转换函数3.strlen的使用和模拟实现3.1使用示例3.2模拟实现 4.strcpy的使用和模拟实现4.1使用示例:4.2模拟实现 5.strcat的使用和模拟实现5.1使用示例5.2模拟实现 6.strcmp的使用和模拟实现6.1使用示例6.2模拟实现 7.总结 1.字符分类函数 2.字符转换函数 3.strlen的使用和模拟实现 4.strcpy的使用和模拟实现 5.strcat的使用和模拟实现 6.strcmp的使用和模拟实现
1.字符分类函数
C语言中存在一系列函数是专门来做字符分类的即一个字符属于什么类型 这些函数的使用都要包含头文件ctype.h 函数如果函数的参数符合下列条件就返回为真iscntrl任何控制字符isspace空白字符 空格 ‘ ’ 换页符’\f’ 换行符’\n’ 回车’\r’ 制表符’\t\或垂直制表符’\v’isdigit十进制数字‘0’到‘9’字符isxdigit十六进制数字包括所有十进制数字字符小写字母a~f,大写字母A到Fislower小写字母a ~zisupper大写字母A~Fisalpha字母a~f A~Fisalnum数字或字母a zAF0~9ispunct标点符号任何不属于数字或字母的图形字符isgraph任何图形字符isprint任何可打印字符包括空白字符和图形字符
这些函数的使用方法都十分相似以一个函数举例
int isupper(int a);
//判断函数的参数部分是否是大写字母#includestdio.h
#includectype.h
int main()
{char a A;char b a;printf(%d\n %d\n, isupper(a), isupper(b));return 0;
}看结果
2.字符转换函数
在学习过程中我们可能会遇到要把大小写字母相互转化的情况在没学习字符转换函数之前我们可能这样写代码
int main()
{char a A;char b b;//把A转成小写把b转成大写printf(A的小写是%c\nb的大写是%c\n, a 32, b - 32);return 0;
}但是c语言为我们提供了两个字符转换函数
int tolower(int c);//将参数转换成小写
int toupper (int c);//将参数转化成大写
于是上边的代码我们可以将它调整成这样
int main()
{char a A;char b b;//把A转成小写把b转成大写//printf(A的小写是%c\nb的大写是%c\n, a 32, b - 32);printf(A的小写是%c\nb的大写是%c\n, tolower(a), toupper(b));return 0;
}运行结果仍成立
3.strlen的使用和模拟实现
注意事项 1.字符串以’\0’做为结束标志返回字符串中’\0’之前的字符个数不包括’\0’ 2.参数字符串必须以’\0’结束 3.返回值为size_t,是无符号的 4.strlen的使用包含头文件string.h 3.1使用示例
#includestring.h
int main()
{char s[] abcdef;int ret strlen(s);printf(%d, ret);return 0;}3.2模拟实现
对于这个函数的模拟实现介绍三种方法
//计数器实现
int my_strlen1(char* s)
{int count 0;while (*s ! \0){s;count;}return count;
}
//利用函数递归
int my_strlen1(char* s)
{if (*s \0)return 0;elsereturn 1 my_strlen1(s 1);}
//指针-指针
int my_strlen1(char* s)
{char* m s;while (*s ! \0){s;}return s - m;
}4.strcpy的使用和模拟实现 strcpy就是把源字符串的内容拷贝到目标字符串
char* strcpy(char *destination,char* source );函数返回值的类型与目标空间的类型一致
注意事项 1.源字符串必须以’\0’结尾 2.会将源字符串的‘\0’拷贝到目标空间 3.目标空间足够大 4.源字符串不可修改目标空间可以修改 4.1使用示例:
int main()
{char a[20] { 0 };char b[6] world;//原字符串一定要以\0结尾strcpy将原字符串的\0也拷贝到目标字符串内才能结束拷贝strcpy(a, b);printf(%s, a);return 0;
}4.2模拟实现
#includeassert.h
char* my_strcpy(char* a, const char* b)
{assert(a);assert(b);char* m a;//a的时候a已经改变了所以先定义一个指针变量来找到a的原始位置while (*b ! \0){//*a *b;//后置先用再//b;//a;*a *b;}printf(%s, m);}int main()
{char a[20] { 0 };char b[15] hello world;my_strcpy(a, b);return 0;
}5.strcat的使用和模拟实现 与strcpy不同的是strcat是追加字符或字符串
char* strcat(char *destination,char* source );函数返回值的类型与目标空间的类型一致
注意事项 1.源字符串必须以’\0’结尾 2.目标字符串中也必须要有’\0’,否则不知道从哪里开始追加 3.目标空间足够大 4.源字符串不可修改目标空间可以修改 5.1使用示例
//strcat追加
//目标字符串也得以\0结尾才知道从哪里追加追加的时候会追加上原字符串的\0int main()
{char s[20] hello ;char b[6] world;strcat(s, b);printf(%s, s);return 0;
}5.2模拟实现
char* my_strcat(char* s, const char* a)
{assert(s);assert(a);char* m s;while (*s ! \0){s;//先让目标字符串到达要追加的位置}while (*a ! \0){*s *a;}printf(%s, m);}
int main()
{char s[20] hello ;char b[6] world;my_strcat(s, b);return 0;
}6.strcmp的使用和模拟实现 注意strcmp的返回值
在进行比较的时候比较的是两个字符对应的ASCII码的值的大小
char* strcmp(char *str1,char* str2 );函数返回值的类型与目标空间的类型一致
6.1使用示例
int main()
{char a[10] abcdef;char b[10] abcdeg;int ret strcmp(a, b);if (ret 0){printf(ab);}else if (ret 0){printf(ab);}else{printf(ab);}return 0;
}6.2模拟实现
char* my_strcmp(const char* a,const char* b)
{while (*a *b){if (*a \0)return 0;a;b;}return *a - *b;//如果字符串a大返回值就是一个大于0的数反之同理
}
int main()
{char a[10] abcdef;char b[10] abcdef;int retmy_strcmp(a, b);if (ret 0){printf(ab);}else if (ret 0){printf(ab);}else{printf(ab);}return 0;
}
7.总结
字符串函数整体来说还是比较容易的学习这些也能帮助我们在写代码遇到问题时有更多的解决途径
作者有话说作者只是一个小白以上是作者在学习过程中的记录与分享如有错误和不足之处望指出如果觉得有帮助请留下一个