91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

【C語言】str類與men庫函數的實現(如:strcpy,strcmp,strstr,strcat,memmove,memcpy)

發布時間:2020-06-23 16:59:14 來源:網絡 閱讀:557 作者:韓靜靜 欄目:編程語言
  1. strcpy

拷貝源字符串到子字符串,包括‘\0’。

代碼實現:

char* strcpy(char* dst,const char* src)
{
    assert(src);
    char* ret = dst;
    while (*src)
    {
        *dst = *src;
        src++;
        dst++;
    }
    *dst = '\0';
    return ret;
}



2.strncpy:

strncpy與strcpy之間差別在于,strcpy將源字符串全部拷貝到新的字符串中,而strncpy拷貝長度由自己確定。

代碼實現:

char* strncpy(char* dst, const char* src, int count)
{
    assert(dst);
    assert(src);
    char* ret = dst;
    while (count--)
    {
        *dst = *src;
        dst++;
        src++;
    }
    *dst = '\0';
    return ret;
}


3.strcat:

strcat作用是鏈接字符串,即:

str1: hel    str2:lo    則鏈接后為hello。

代碼實現:

char* strcat(char* dst, char* src)
{
    assert(dst);
    assert(src);
    char* ret = src;
    while (*src)
    {
        src++;
    }
    while (*dst)
    {
        *src = *dst;
        dst++;
        src++;
    }
    *dst = '\0';
    return ret;
}


4.strcmp:

strcmp用來比較字符串長度。

對兩個字符串自左至右逐個字符相比(按ASCII碼值大小比較),直到出現不同的字符或遇到‘\0’為止。如果全部字符相同,則認為相等;若出現不相同的字符,則以第一個不相同的字符的比較結果為準。
如果兩個字符串都由英文字母組成,則有一個簡單的規律:在英文字典中位置在后面的為“大”,還要特別注意:小寫字母比大寫字母“大”。
返回值:
(1)字符串1=字符串2,返回0
(2)字符串1>字符串2,返回一個正整數
(3)字符串1<字符串2,返回一個負整數。

代碼實現:

int strcmp(const char* dst, const char* src)
{
    assert(dst);
    assert(src);
    while (*src&&*dst)
    {
        if (*src == *dst)
        {
            src++;
            dst++;
        }
        else
        {
            return *src - *dst - '\0';
        }
    }
    return *src - *dst - '\0';
}


5.strncmp:

與strcmp區別在于:strcmp是針對整個字符串而言,而strncmp針對指定長度。

但是要注意,如果count比兩者字符串長度都短的話,則要跳出循環結束。當長度大于兩者字符串長度時,仍然可以比較出是否相等。

代碼實現:

int strncmp(const char* dst, const char* src,size_t count)
{
    assert(dst);
    assert(src);
    while (count--&&*src&&*dst)
    {
        if (*src == *dst)
        {
            src++;
            dst++;
        }
        else
        {
            return *src - *dst - '\0';
        }
    }
    return *src - *dst - '\0';
}


6.strstr:

尋找子字符串,我們在源字符串設置一個指針,用做來當此時確實滿足是子串標志原串的位置,如下面的p。而s1,s2分別用作來遍歷。

代碼實現:

char* strstr(const char* dst, const char* src)
{
    assert(dst);
    assert(src);
    char* s1 = dst;

    char* p = src;
    char* s2 = p;

    while (*s2)
    {
        s1 = dst;
        s2 = p;
        while (*s2 && *s1)
        {
            if (*s2 == *s1)
            {
                s1++;
                s2++;
            }
            else
            {
                p++; 
                break;
            }
        }
        if (*s1 == '\0')
        {
            return p;
        }
    }
    return NULL;
}


7.memcpy:

strcpy完成字符串的拷貝,而對于非字符串類的,卻要用memcpy完成內存拷貝。

代碼實現:

void* memcpy(void* dst, const void* src, size_t count)
{
    assert(dst);
    assert(src);
    char* dst_ = (char*)dst;
    char* src_ = (char*)src;
    while (count--)
    {
        *dst_++ = *src_++;
    }
    //即使此時count不為0,但是當我們將原數拷貝到新的數據結束,那也要結束程序。
    *dst_ = '\0';//必須加上結束標志,否則會亂碼
    return dst;
}


8.memmove:

memmove在于它可解決內存重疊問題。

如:將1,2,3,4,5,6,7,8中的1,2,3,4移動到3,4,5,6位置。那么則仍然按照memcpy則會,將1移動到3處,2移動到4處,再準備移動3時發現此時的3已經由于被移動到此處的1覆蓋而丟失。4同理。這就是memmove的優勢所在。我們分情況即可解決。

代碼實現:

void memmove(void* dst, const void* src, size_t count)
{
    assert(dst);
    assert(src);
    char* dst_ = (char*)dst;
    char* src_ = (char*)src;
    if (dst_ > src_&&dst < dst_ + count)
    {
        while (count--)
        {
            *(dst_+count) = *(src_+count);
            dst_++;
            src_++;
        }
    }
    else
    {
        while (count--)
        {
            *dst_ = *src_;
            dst_++;
            src_++;
        }
    }
    *dst_ = '\0';
    return dst;
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德令哈市| 樟树市| 金湖县| 横山县| 宿松县| 浙江省| 湄潭县| 耒阳市| 依兰县| 和平区| 建水县| 江陵县| 北辰区| 巨野县| 冕宁县| 土默特右旗| 句容市| 子洲县| 乐东| 阿巴嘎旗| 竹山县| 盐源县| 阿坝| 夏河县| 喀喇沁旗| 额尔古纳市| 凤台县| 滁州市| 温州市| 德保县| 张家界市| 正阳县| 文成县| 阜城县| 内丘县| 曲阳县| 平凉市| 阳东县| 嘉荫县| 金塔县| 华容县|