字符串函数
strlen
strlen函数:计算字符串的长度(\0不计算)
三种方法模拟实现:
1.计数器;
2.指针相减,两个指针相减得到它们之间的个数;
3.递归;
#include<stdio.h>
#include<assert.h>
//方法1
size_t my_strlen(const char* str)
{
assert(str);
size_t count = 0;
while (*str)
{
str++;
count++;
}
return count;
}
//方法2
size_t my_strlen(char* str)
{
assert(str);
char* p = str;
while (*p)
p++;
return p - str;
}
//方法3
size_t my_strlen(char* str)
{
if (*str == '\0')
return 0;
else
return 1 + strlen(str + 1);
}
int main()
{
char arr[] = "abcde";
size_t ret=my_strlen(arr);
printf("%u\n",ret);
return 0;
}
strcpy
strcpy函数:拷贝字符串(\0也拷贝)
以下是模拟实现:
#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* dest, const char* src)
{
char* ret = dest;
assert(src&&dest);
while (*dest++ = *src++)
;
return ret;
}
int main()
{
char arr1[] = "abcde";
char arr2[] = "xxxxxxx";
my_strcpy(arr2, arr1);
printf("%s\n", arr2);
return 0;
}
strcat
strcat函数:追加字符串。
相当于在源字符串\0位置后拷贝一个字符串,所以strcat和strcpy实现有相似之处。
以下是模拟实现:
char* my_strcat(char* dest, const char* src)
{
char* ret = dest;
assert(src && dest);
while (*dest)
dest++;
while (*dest++ = *src++)
;
return ret;
}
int main()
{
char arr1[20] = "hello ";
char arr2[] = "world";
my_strcat(arr1,arr2);
printf("%s\n",arr1);
return 0;
}
strcmp
strcmp函数:比较字符串大小(以字节为单位比较)
以下是模拟实现:
#include<stdio.h>
#include<assert.h>
int my_strcmp(const char* str1, const char* str2)
{
assert(str1 && str2);
while (*str1 == *str2)
{
if (*str1 == '\0')
return 0;
str1++;
str2++;
}
if (*str1 > *str2)
return 1;
else
return -1;
}
int main()
{
char arr1[] = "abcdef";
char arr2[] = "abcde";
int ret = my_strcmp(arr1, arr2);
printf("%d\n", ret);
}
strstr
strstr函数:从源字符串中找子字符串;
以下是模拟实现:
#include<stdio.h>
#include<assert.h>
char* my_strstr(char* str1, char* str2)
{
assert(str1 && str2);
char* cp = str1;
char* s1 = str1;
char* s2 = str2;
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[] = "abbcdef";
char arr2[] = "bcd";
char* p=my_strstr(arr1, arr2);
printf("%s\n",p);
return 0;
}
这里就简单的介绍了一些字符串函数及其模拟实现方式,更多的在cplusplus官网上有更详细的函数介绍。