常用字符串函数使用及实现
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++;
}
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;
}
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;
}
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;
}
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; }