C 字符串相关函数

常用的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;
}

猜你喜欢

转载自blog.csdn.net/Aurora_pole/article/details/80332957