写在前面
本文主要讲一些能提高效率的字符/字符串函数,以及一些易错点
正文
strlen函数——字符串计算长度
size_t strlen(const char *str)
- 计算字符串 str 的长度,直到空结束字符'\0',但不包括空结束字符'\0'
- 返回类型size_t,这是无符号整数类型(unsigned int)
- 为了方便起见,我们自己模拟实现的时候就用int 来代替size_t
模拟实现
#include<stdio.h>
#include<assert.h>
int my_strlen(const char* str)
{
int count = 0;
assert(str != NULL);
while (*str != '\0')//或者写成while(*str)
{
str++;
count++;
}
return count;
}
int main()
{
char str[] = "abcdef";
int ret=my_strlen(str);
printf("%d", ret);
return 0;
}
strcpy函数——字符串拷贝
char *strcpy(char *dest, const char *src)
- 把 src 所指向的字符串复制到 dest,需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。
- src中的'\0',也会拷贝到dest中
- 模拟函数中两种写法是等价的,第二种的写法更加精简
#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* dest, const char* src)
{
assert(dest != NULL);
assert(src != NULL);
char* ret = dest;
/*while (*src!='\0')
{
*dest = *src;
dest++;
src++;
}
*dest = *src;*/
while (*dest++ = *src++);//或者写成这样更精简的方法
return ret;
}
int main()
{
char arr1[] = "abcdefghijk";
char arr2[] = "qaz";
my_strcpy(arr1, arr2);
printf("%s", arr1);
return 0;
}
strcat函数——字符串追加
char *strcat(char *dest, const char *src)
- 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。
- 保证目的地足够大,源头包括'\0',并且不能自己追加自己
#include<stdio.h>
#include<assert.h>
char* my_strcat(char* dest,const char* src)
{
assert(dest != NULL);
assert(src != NULL);
char* ret = dest;
//找到'\0'
while (*dest != '\0')
dest++;
//追加
while (*dest++ = *src++);
return ret;
}
int main()
{
char str1[30] = "Hello! ";
char str2[] = "CSDN!";
my_strcat(str1, str2);
printf("%s", str1);
return 0;
}
strcmp函数——字符串的比较
int strcmp(const char *str1, const char *str2)
把 str1 所指向的字符串和 str2 所指向的字符串进行比较,不比较两个字符串的长度,而是比较字符串中每个字符的
- 如果返回值小于 0,则表示 str1 小于 str2。
- 如果返回值大于 0,则表示 str1 大于 str2。
- 如果返回值等于 0,则表示 str1 等于 str2。
#include<stdio.h>
#include<assert.h>
int my_strcmp(const char* str1, const char* str2)
{
assert(str1 != NULL);
assert(str2 != NULL);
while (*str1 == *str2)
{
if (*str1 == '\0')
return 0;
str1++;
str2++;
}
if (*str1 > *str2)
return 1;
else
return -1;
}
int main()
{
char* str1 = "abcd";
char* str2 = "abcde";
int ret = my_strcmp(str1, str2);
printf("%d", ret);
}
写在最后
👍🏻点赞,你的认可是我创作的动力!
⭐收藏,你的青睐是我努力的方向!
✏️评论,你的意见是我进步的财富!