strlen()
函数介绍
size_t strlen(const char * str);
1、字符串以’\0’作为结束标志,strlen函数返回的是在字符串中’\0’前面出现的字符个数(不包含’\0’)
2、参数指向的字符串必须要以’\0’结束
3、注意函数的返回值为size_t,是无符号的
模拟实现
#include<stdio.h>
#include<windows.h>
int my_strlen(const char * str)
{
int count = 0;
while (*str){
count++;
str++;
}
return count;
}
int my_strlen2(const char * str)
{
if (*str == '\0'){
return 0;
}
else{
return 1 + my_strlen(str + 1);
}
}
int my_strlen2(const char * str)
{
char *p = str;
while (*p != '\0'){
p++;
}
return p - str;
}
int main()
{
const char * str = "abcdefg";
int len = my_strlen(str);
printf("%d\n", len);
system("pause");
return 0;
}
strspy()
函数介绍
char * strcpy ( char * destination, const char * source );
复制字符串
将source指向的C字符串复制到destination指向的数组中,包括终止空字符(并在该点停止)。
为避免溢出,目标指向的数组大小应足够长,以包含与源相同的C字符串(包括终止空字符),并且不应在内存中与源重叠。
模拟实现
#include<stdio.h>
#include<Windows.h>
#include<assert.h>
char * my_strcpy(char *des, const char *src)
{
char *ret = des;
assert(des != NULL);
assert(src != NULL);
while (*des++ = *src++);
return ret;
}
int main()
{
const char * str1 = "abcdefg";
char str2[20];
my_strcpy(str2, str1);
printf("%s\n", str2);
system("pause");
return 0;
}
strcat()
函数介绍
char * strcat ( char * destination, const char * source );
连接字符串
将源字符串的副本附加到目标字符串。在终止空字符目的地是由所述第一字符覆盖源,以及一个空字符被包括在由两者的在级联形成的新字符串的末尾目的地。
注意:目的地和来源不得重叠。
模拟实现
#include<stdio.h>
#include<windows.h>
#include<assert.h>
char * my_strcat(char *des, const char *src)
{
char *ret = des;
assert(des != NULL);
assert(src != NULL);
while (*des){
des++;
}
while (*des++ = *src++);
return ret;
}
int main()
{
const char * str1 = "abcdefg";
char str2[20] = "abcd";
my_strcat(str2, str1);
printf("%s\n", str2);
system("pause");
return 0;
}
strstr()
函数介绍
char * strstr ( const char * str1, const char * str2 );
找到子字符串
将指针返回到第一次出现STR2在STR1如果,或一个空指针STR2不是部分STR1。
匹配过程不包括终止空字符,但它会在那里停止。
#include<stdio.h>
#include<assert.h>
char * my_strstr(const char*str1,const char*str2)
{
const char *s1 = str1;
const char *s2 = str2;
const char *cp = str1;
assert(str1 != NULL);
assert(str2 != NULL);
if(*str2 == '\0')
return (char*)str1;
while(*cp)
{
s1 = cp;
s2 = str2;
while(*s1 && *s2 && *s1 == *s2)
{
s1++;
s2++;
}
if(*s2 == '\0')
return (char *)cp;
cp++;
}
return NULL;
}
int main()
{
char *p1 = "bbc";
char *p2 = "abbcdef";
char *ret = my_strstr(p2,p1);
printf("%s\n",ret);
return 0;
}