本文将会分享一些使用C语言实现内置字符串函数的实例,从而加深对字符串函数的理解!
一、strlen
这是库中的函数声明: size_t strlen ( const char * str );
此函数作用就是计算从字符串首地址到'\0'之前的字符个数。
//简单的循环方法
int my_strlen(const char * str)
{
int count = 0;
assert(str);
while(*str)
{
count++;
str++;
}
return count;
}
//递归方法
int my_strlen(const char * str)
{
assert(str);
if(*str == '\0')
return 0;
else
return 1 + my_strlen(str+1);
}
//指针减指针
int my_strlen(char *s)
{
assert(str);
char *p = s;
while(*p != ‘\0’ )
p++;
return p-s;
}
二、strcpy
这是库中的函数声明: char * strcpy ( char * destination, const char * source );
此函数作用是将source中的字符串拷贝到destina中。
char *my_strcpy(char *dest, const char*src)
{
char *ret = dest;
assert(dest != NULL);
assert(src != NULL);
//src到'\0'位置后,会停止循环,返回
while((*dest++ = *src++))
{
;
}
return ret;
}
三、strcat
这是库中的函数声明: char * strcat ( char * destination, const char * source );
此函数作用是将source字符串连接在destina的末尾。
char *my_strcat(char *dest, const char*src)
{
char *ret = dest;
assert(dest != NULL);
assert(src != NULL);
while(*dest)//将dest指针变量移动到'\0'位置
{
dest++;
}
while((*dest++ = *src++))//从'\0'位置开始将src中的字符拷贝到dest中
{
;
}
return ret;
}
四、strcmp
这是库中的函数声明: int strcmp ( const char * str1, const char * str2 );
此函数的作用是:比较str1和str2对应位置上的字符大小。
int my_strcmp (const char * str1, const char * str2)
{
int ret = 0 ;
assert(src != NULL);
assert(dest != NULL);
while(*str1 == *str2)
{
if(*str1 == '\0')
return 0;
str1++;
str2++;
}
return *str1-*str2;
}
五、strncpy
库中的函数声明:char * strncpy ( char * destination, const char * source, size_t num );
此函数作用是将source中n个字节大小的字符拷贝到destination中。
char* my_strncpy(char* dest, char* src, size_t num)
{
assert(dest && src);
char* start = dest;
while (num--)
{
*dest++ = *src++;
}
return start;
}
六、strncat
库中的函数声明: char * strncat ( char * destination, const char * source, size_t num );
此函数作用是将source中num个字节大小的字符连接在destina末尾。
char* my_strncat(char* dest, char* src, size_t num)
{
assert(dest && src);
char* start = dest;
while (*dest)
{
dest++;
}
while (num--)
{
*dest = *src;
dest++;
src++;
}
return start;
}
七、strncmp
库中的函数声明:int strncmp ( const char * str1, const char * str2, size_t num );
此函数作用是比较str1和str2中的num个字节大小的对应字符大小
int my_strncmp(const char* str1, const char* str2, size_t num)
{
while (num--)
{
while (*str1 && *str2)
{
if (*str1 == *str2)
{
str1++;
str2++;
}
else if (*str1 > *str2)
{
return 1;
}
else
{
return -1;
}
}
}
return 0;
}
八、strstr
库中的函数声明: char * strstr ( const char * str1, const char * str2);
此函数作用是找到str1中str2第一次出现的首地址。
//一种通俗的办法
char* my_strstr(char* str1, char* str2)
{
assert(str1 && str2);
char* cur = str1;
char* start = str2;
while (*str1)
{
cur = str1;
start = str2;
if (*cur == *start)
{
while (*cur&&*start)
{
if (*cur == *start)
{
cur++;
start++;
}
else
{
break;
}
}
if (*start == '\0')
{
return str1;
}
str1++;
}
else
{
str1++;
}
}
return NULL;
}
char * strstr (const char * str1, const char * str2)
{
char *cp = (char *) str1;
char *s1, *s2;
if ( !*str2 )
return((char *)str1);
while (*cp)
{
s1 = cp;
s2 = (char *) str2;
while ( *s1 && *s2 && !(*s1-*s2) )
s1++, s2++;
if (!*s2)
return(cp);
cp++;
}
return(NULL);
}
相信到此,您已对C语言中的字符串函数有了更深的理解,当然可以举一反三了!
如果本文帮到了你,麻烦给个三连吧!