常用的8个C标准库中字符创相关的函数及实现
strlen
- 函数功能:求字符串长度函数,用于求C风格的字符串str的长度
- 函数说明:区别于sizeof,strlen遇到第一个’\0’就结束,返回的字符串长度不包括’\0’
- 函数原型:
#include <string.h>
size_t strlen(const char *s);
- 函数实现:
size_t my_strlen(char* s)
{
size_t count = 0;
while (*s != '\0')
{
count++;
*s++;
}//*s=='\0'
return count;
}
strcpy
- 函数功能:拷备字符串函数,将src所指向的字符串拷备到dest所指向的内存空间中
- 函数说明:复制包含’\0’
- 函数原型:
#include <string.h>
char *strcpy(char *dest, const char *src);
- 函数实现:
char* my_strcpy(char *dest, const char *src)
{
char* ret = dest;
assert(dest != NULL && src != NULL);
while (*src)
{
*ret++ = *src++;
}
return dest;
}
strncpy
- 函数功能:拷备字符串函数,将src字符串的前n个字符拷备到dest所指向的内存空间中
- 函数原型:
char *strncpy(char *dest, const char *src, size_t n);
- 函数实现:
char* my_strncpy(char *dest, const char *src, size_t n)
{
char* ret = dest;
assert(dest != NULL && src != NULL);
while (*src && n)
{
*ret++ = *src++;
n--;
}
return dest;
}
strcat
- 函数功能:字符串追加函数,将src所指向的字符串追加到dest所指向的字符串的末尾
- 函数说明:dest和src所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串
- 函数原型:
#include <string.h>
char *strcat(char *dest, const char *src);
- 函数实现:
char* my_strcat(char *dest, const char *src)
{
char* ret = dest;
assert(dest != NULL && src != NULL);
while (*ret )
{
*ret++;
}//*ret='\0'
while (*src )
{
*ret++ = *src++;
}//*src='\0'
*ret = '\0';
return dest;
}
strncat
- 函数功能:字符串追加函数,将src所指向的字符串的前n个字符追加到dest所指向的字符串的末尾
- 函数原型:
char *strncat(char *dest, const char *src, size_t n);
- 函数实现:
char* my_strncat(char *dest, const char *src,int n)
{
char* ret = dest;
assert(dest != NULL && src != NULL);
while (*ret)
{
*ret++;
}//*ret='\0'
while (*src && n)
{
*ret++ = *src++;
n--;
}//*src='\0'
*ret = '\0';
return dest;
}
strcmp
- 函数功能:字符串比较函数,用于比较str1和str2所指向的两个字符串的大小
- 函数说明:若str1 > str2,返回值 > 0;若str1 = str2,返回值 = 0;
若str1 < str2,返回值 < 0 - 函数原型:
#include <string.h>
int strcmp(const char *str1,const char *str2);
- 函数实现:
int my_strcmp(const char* str1, const char* str2)
{
while (*str1 == *str2)
{
*str1++;
*str2++;
}//*str1!=*str2;
return *str1 - *str2;
}
strchr
- 函数功能:字符查找函数,查找c字符在s字符串中第一次出现的位置
- 函数原型:
#include <string.h>
char* strchr(const char *s, char c);
- 函数实现:
char* my_strchr(const char *s, char c)
{
assert(s);
while (*s++ || *s==c)
{
if (*s == c)
return *s;
}
return NULL;
}
strstr
- 函数功能:子串查找函数,查找子字符串str2在字符串str1中第一次出现的位置
- 函数说明:若str2是str1的子串,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
- 函数原型:
#include <string.h>
char* strstr(const char *haystack, const char *needle);
- 函数实现:
char* my_strstr(const char* dest, const char* src)
{
char* pos = dest;
char* ret = src;
char* tmp = pos;
assert(dest != NULL && src != NULL);
while (*tmp)
{
pos = tmp;
ret = src;
while (*pos == *ret)
{
*pos++;
*ret++;
}//*pos!=*ret
if (*ret == '\0')
return *tmp;
tmp++;
}
return NULL;
}