- 前言:
- 在做OJ题或阅读代码时或多或少会遇到一些字符函数和字符串函数,
如果不认识或不熟悉就会造成不便,
本篇文章主要是为了这方面而存在,
此篇介绍各个字符串的功能与使用方法,
下一篇会讲解如何模拟这些函数
重点:
重点介绍处理字符和字符串的库函数的使用和注意事项
一一一一一一一一分割线一一一一一一一一一
目录
- 1.函数介绍:
- 1.1 strlen
- 1.2 strcpy
- 1.3 strcat
- 1.4 strcmp
- 2.库函数的模拟实现:
1.函数介绍:
1.1 strlen
我们可得这个函数是求在字符串开始与
'\0'
之间的字符串长度
代码示例:
#include <stdio.h>
int main()
{const char* str1 = "abcdef";const char* str2 = "bbb";printf("%d\n", strlen(str1));printf("%d\n", strlen(str2));if (strlen(str2) - strlen(str1) > 0){printf("str2>str1\n");}else{printf("srt1>str2\n");}return 0;
}
结果:
解释:
这里的6和3容易理解,那么str2>str1怎么解释?
因为strlen返回值类型为size_t
类型,为无符号整形,
即相减的结果虽然为一个负数,但负数的无符号整形显然是巨大的正数
故大于
- 此函数的注意事项:
- 1.字符串以 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。
- 2.参数指向的字符串必须要以 ‘\0’ 结束。
- 3.注意函数的返回值为size_t,是无符号的( 易错 )
一一一一一一一一分割线一一一一一一一一一
1.2 strcpy
我们可以知道此函数是为了拷贝字符串的
代码示例:
#include<string.h>int main()
{char str1[20] = { 0 };char str2[] = "hello world";strcpy(str1, str2);printf("%s\n", str1);return 0;
}
结果:
- 此函数的注意事项:
- 1.源字符串必须以 ‘\0’ 结束。
- 2.会将源字符串中的 ‘\0’ 拷贝到目标空间。
- 3.目标空间必须足够大,以确保能存放源字符串。
- 4.目标空间必须可变。
一一一一一一一一分割线一一一一一一一一一
1.3 strcat
上边两个函数很容易就可以根据形式看出大概意思,
str代表字符串,那么cat代表什么?
他代表Catenate,连接的缩写,也就是追加字符串的意思
代码示例:
int main()
{char str1[20] = "abc";char str2[] = "dfg";strcat(str1, str2);printf("%s\n", str1);return 0;
}
结果:
- 此函数的注意事项:
- 1.源字符串必须以 ‘\0’ 结束。
- 2.目标空间必须有足够的大,能容纳下源字符串的内容。
- 3.目标空间必须可修改。
- 4.不可以自己追加自己。
解释:关键在于'\0'
,因为
一一一一一一一一分割线一一一一一一一一一
1.4 strcmp
我们可以得出此函数是为为比较字符串函数
代码示例:
int main()
{char str1[] = "abb";char str2[] = "abc";int ret =strcmp(str1, str2);printf("%d\n", ret);return 0;
}
- 此函数的注意事项:
- 1.第一个字符串大于第二个字符串,则返回大于0的数字
- 2.第一个字符串等于第二个字符串,则返回0
- 3.第一个字符串小于第二个字符串,则返回小于0的数字
- 4.比较字符串是从头开始逐一比较每个字符的ASCII码值,相等就继续向下比较,直到输出
努力更新中。。。
2.库函数的模拟实现:
努力更新中。。。