一.字符函数:
C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符的。 这些函数的使⽤都需要包含⼀个头⽂件是 ctype.h
1.字符分类函数:
运用练习:将一个字符串中的小写字母转成大写字母
没学字符分类函数之前:
学习了字符分类函数后:
2.字符转换函数:
还是上面那个例题,我们可以用字符分类函数和字符转换函数共同完成:
因为这两个字符转换函数传进去的参数是整形,所以要进行强制转换。
二.字符串函数:
1.strlen使用和模拟实现:
size_t strlen ( const char * str );
• 字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前⾯出现的字符个 数 (不包 含 '\0' )。
• 参数指向的字符串必须要以 '\0' 结束。
1.使用:
2.模拟实现:
法一:计数器的方式
法二:函数递归的方式
法三:指针-指针的方式
2.strcpy使用和模拟实现:
char* strcpy(char * destination, const char * source );
• 源字符串必须以 '\0' 结束。
• 会将源字符串中的 '\0' 拷⻉到⽬标空间。
1.使用:
2.模拟实现:
3.strcat使用和模拟实现:
1.使用:
2.模拟实现:
4.strcmp的使用和模拟使用:
• 标准规定:
◦ 第⼀个字符串⼤于第⼆个字符串,则返回⼤于0的数字
◦ 第⼀个字符串等于第⼆个字符串,则返回0
并不是比较字符串的长度是比较对应位置字符的ASCII码值的大小。
1.strcmp使用:
2.strcmp的模拟使用:
5.strncpy的使用:
这就是源字符串小于num的情况,会自动补上'\0'.
6.strncat的使用:
将source指向字符串的前num个字符追加到destination指向的字符串末尾,再追加⼀个 \0 字
7.strncmp的使用:
int strncmp ( const char * str1, const char * str2, size_t num );
⽐较str1和str2的前num个字符,如果相等就继续往后⽐较,最多⽐较num个字⺟,如果提前发现不⼀ 样,就提前结束,⼤的字符所在的字符串⼤于另外⼀个。如果num个字符都相等,就是相等返回0
8.strstr的使用和模拟实现:
char * strstr ( const char * str1, const char * str2);
函数返回字符串str2在字符串str1中第⼀次出现的位置。
字符串的⽐较匹配不包含 \0 字符,以 \0 作为结束标志。
1.strstr的使用:
当strstr函数在一个个比较你要找的字符后当都符合时就记住所找到的位置并往后打印直到有'\0'的位置。
2.strstr的模拟实现:
对于字符串中找字符串有三种不同的情况与之对应:
首先分析最简单的情况:
当首地址传过来的时候,就开始比较,这时指向的字符相等故分别向后走,走到最后有'\0‘的位置。但当str1往后走的时候str1指向的内容发生了变化所以得出一个结论要一个指针变量记录开始的位置
然后分析复杂的情况(存在多次匹配):
因为一开始指向的字符不相等所以str2指向的不能动,而str1往后走找到b此时相等,所以str1与str2都向后走此时两个指向的字符也都是b,所以再次往后走,但是此时str1指向的是b,str2指向的是c此时两个指向不相等了。因为一开始str1从a指向开始向后找没找到,所以str1此时要从下一个字符为起始位置开始向后寻找,所以需要一个指针变量来记录str1开始匹配的位置。此时str2的位置也改变了,所以还需要一个指针变量记录str2的起始位置。
根据分析上面两种情况可得出的结论:
函数里要有三个不同的指针变量,一个指向str1的起始位置,一个指向str1开始匹配的位置
一个指向str2的起始位置。
9.strtok的使用:
char * strtok ( char * str, const char * sep);
10.strerror 函数的使用:
char * strerror ( int errnum );