专业网站建设网站价格,网站开发项目章程示例,如何使用wordpress模板,转团关系必须用电脑吗文章目录 一、字符函数1、字符分类函数2、字符转换函数 二、字符串函数1、strlen概述模拟实现 2、strcpy概述模拟实现 3、strcat概述模拟实现 3、strcmp概述模拟实现 4、有限制的字符串函数strncpystrncatstrncmp 4、strstr概述模拟实现 一、字符函数
1、字符分类函数
包含头… 文章目录 一、字符函数1、字符分类函数2、字符转换函数 二、字符串函数1、strlen概述模拟实现 2、strcpy概述模拟实现 3、strcat概述模拟实现 3、strcmp概述模拟实现 4、有限制的字符串函数strncpystrncatstrncmp 4、strstr概述模拟实现 一、字符函数
1、字符分类函数
包含头文件
#includectype.h函数如果它的参数复合下列条件就返回真一个非零数字iscntrl任何控制字符任何控制字符空白字符空格’ ‘换页’\f’换行’\n’回车’\r’制表符’\t’或者垂直制表符’\v’isdigit十进制数字0~9isxdigit十六进制数字包括所有十进制数字小写字母a~f大写字母A-Fislower小写字母a~zisupper大写字母A~Zisalpha字母a~z或A-Zisalnum字母或者数字a-zA-Z 0~9ispunct标点符号任何不属于数字或者字母的图形字符可打印isgraph任何图形字符isprint任何可打印字符包括图形字符和空白字符
这些字符函数都很类似举一个例子 将小写字母转换成大写字母 #includestdio.h
#includectype.hint main()
{char str[] Test String;char c;int i 0;while (str[i]){c str[i];if (islower(c))c c - 32;putchar(c);i;}return 0;
}运行结果 TEST STRING.2、字符转换函数
int tolower ( int c ); //将参数传进去的⼩写字⺟转⼤写
int toupper ( int c ); //将参数传进去的⼤写字⺟转⼩写我们知道将小写字母转换成大写是-32大写字母转换成小写字母是32
那么现在有了字符转换函数就可以直接实现
#include stdio.h
#include ctype.h
int main()
{int i 0;char str[] Test String.\n;char c;while (str[i]){c str[i];if (islower(c))c toupper(c);putchar(c);i;}return 0;
}运行结果 TEST STRING.二、字符串函数
1、strlen
概述
size_t strlen ( const char * str );• 字符串以 ‘\0’ 作为结束标志strlen函数返回的是在字符串中 ‘\0’ 前⾯出现的字符个数不包含 ‘\0’ )。 • 参数指向的字符串必须要以 ‘\0’ 结束。 • 注意函数的返回值为size_t是⽆符号的 易错 • 学会strlen函数的模拟实现 模拟实现 法1 #includestdio.h
#includestring.h
#includeassert.hsize_t my_strlen(const char* str)
{int count 0;assert(str);while (*str){count;str;}return count;
}int main()
{char arr[] abc;size_t len my_strlen(arr);printf(%zd\n, len);return 0;
}法2 #includestdio.h
#includestring.h
#includeassert.hsize_t my_strlen(const char* str)
{assert(str);if (*str \0)return 0;elsereturn 1 my_strlen(str 1);
}int main()
{char arr[] abc;size_t len my_strlen(arr);printf(%zd\n, len);return 0;
}法3 #includestdio.h
#includestring.h
#includeassert.hsize_t my_strlen(char* s)
{char* p s;while (*p)p;return p - s;
}int main()
{char arr[] abc;size_t len my_strlen(arr);printf(%zd\n, len);return 0;
}2、strcpy
概述
char * strcpy ( char * destination, const char * source );• 源字符串必须以 ‘\0’ 结束。 • 会将源字符串中的 ‘\0’ 拷⻉到⽬标空间。 • ⽬标空间必须⾜够⼤以确保能存放源字符串。 • ⽬标空间必须可变。 • 学会模拟实现。
模拟实现
char my_strcpy(char* dest, const char* src)
{char* ret dest;assert(dest);assert(src);while (*dest *src){;}return ret;
}3、strcat
概述
• 源字符串必须以 ‘\0’ 结束。 • ⽬标字符串中也得有 \0 否则没办法知道追加从哪⾥开始。 • ⽬标空间必须有⾜够的⼤能容纳下源字符串的内容。 • ⽬标空间必须可修改。
模拟实现
char my_strcat(char* dest, const char* src)
{char* ret *src;assert(dest);assert(src);while (*dest){dest;}while (*dest *src){;}return ret;
}3、strcmp
概述
标准规定 ◦ 第⼀个字符串⼤于第⼆个字符串则返回⼤于0的数字 ◦ 第⼀个字符串等于第⼆个字符串则返回0 ◦ 第⼀个字符串⼩于第⼆个字符串则返回⼩于0的数字
模拟实现
int my_strcmp(const char* arr1, const char* arr2)
{assert(arr1);assert(arr2);while (*arr1 *arr2){if (*arr1 \0)return 0;arr1;arr2;}return *arr1 - *arr2;
}4、有限制的字符串函数
前面1-3学习字符串函数但是那些字符串函数没有个数限制不安全
下面小编带大家了解一下有个数限制的字符串函数
strncpy
char * strncpy ( char * destination, const char * source, size_t num );• 拷⻉num个字符从源字符串到⽬标空间。
• 如果源字符串的⻓度⼩于num则拷⻉完源字符串之后在⽬标的后边追加0直到num个。
strncat
char * strncat ( char * destination, const char * source, size_t num );#include stdio.h
#include string.h
int main()
{char str1[20];char str2[20];strcpy(str1, To be );strcpy(str2, or not to be);strncat(str1, str2, 6);printf(%s\n, str1);return 0;
}strncmp
int strncmp ( const char * str1, const char * str2, size_t num );⽐较str1和str2的前num个字符如果相等就继续往后⽐较最多⽐较num个字⺟如果提前发现不⼀ 样就提前结束⼤的字符所在的字符串⼤于另外⼀个。如果num个字符都相等就是相等返回0.
4、strstr
概述
char * strstr ( const char *, const char * );在字符串中找一个子字符串
返回str2在str1中第一次出现的位置 如果str2在str1中没有出现就返回NULL
模拟实现
#includestdio.h
#includestring.h
#includeassert.hconst char* my_strstr(const char* str1, const char * str2)
{assert(str1);assert(str2);const char* cp str1;const char* s1 NULL;const char* s2 NULL;//如果子串是空字符串直接返回str1if (*str2 \0)return str1;while (*cp){s1 cp;s2 str2;while (*s1 *s2 *s1 *s2){s1;s2;}if (*s2 \0)return cp;cp;}return NULL;
}int main()
{char arr1[] abbbcdef;char arr2[] bbc;char* ret my_strstr(arr1, arr2);if (ret ! NULL)printf(%s\n, ret);elseprintf(找不到\n);return 0;
}图解