1. 程式人生 > >str類常用函式原始碼

str類常用函式原始碼

strlen() 求字串的長度

原始碼:
#include<assert.h>
//strlen 原始碼
int strlen(const char *str)
{
    assert(*str != '\0');        //斷言,判斷字串是否為空,下同    const char *cp = str;      //str依然為字串首位置
    while(*cp ++);      
    return (cp - str - 1); //-1是因為字串末尾有\0, strlen得到的字串長度沒有\0
}

strcmp() 判斷兩個字串的大小

原始碼:
#include<assert.h>
//判斷字串大小
int strcmp(const char *src, const char *dst)
{
    assert(NULL != src && NULL != dst);
    while(*src && *dst && *src++ == *dst++);
//當兩個字串都不為空切當前字串相等時     return *src - *dst; //返回當前不等字元差值,根據返回值的正負號判斷大小 }

strcpy() 將目標字串複製給源字串並覆蓋源字串

原始碼:
#include<assert.h>

//copy字串
char *strcpy(char *src, const char *dst)
{
    assert(NULL != src && NULL != dst);

    char *temp = src;   //因為下面*str++程式執行完時str不是指向字串首位置,所以需要定義一個新的字串儲存字串首地址,下同
    while(*src++ = *dst++);     return temp; }

strncpy() 按照指定字元個數copy字串 

原始碼:
#include<assert.h>
//按照指定個數copy字串
char *strncpy(char *src, const char *dst, int count)
{
    assert(NULL != src && NULL!= dst);
    
    char *temp = src;

    while((count--) && (*src++ = *dst++));//這裡要注意count--要在&&前面,不然會出錯
    *src = '\0'; //由於不是copy整個字串,所以結尾可能不是\0所以要自己加上

    return temp;

}

strcat() 將兩個字串拼接

原始碼:
#include<assert.h>

//拼接字串

char *strcat(char *src, const char *dst)
{
    assert(NULL != src && NULL != dst);

    char *temp = src;

    while(*src)   //讓src字串跑到結尾,然後跟strcpy一樣實現拼接
    {
        src ++;
    }
    while(*src++ = *dst++);

    return temp;
}

strncat() 按照指定個數實現制定個數字元的拼接

原始碼:
#include<assert.h>

//按照指定字元個數拼接字串

char *strncat(char *src, const char *dst, int count)
{
    assert(NULL != src && NULL != dst);

    char *temp = src;

    while(*src)
    {
        src++;
    }

    while((count--) && (*src++ = *dst++));

    return temp;
}