C/C++實現strcpy和strcat兩個功能

無鞋童鞋發表於2017-08-05

  strcpy和strcat是string.h標頭檔案中分別實現字串陣列拷貝與拼接功能的函式,詳細使用相信大家都瞭解了,如果還不瞭解看看例項 C/C++筆試必須熟悉掌握的標頭檔案系列(四)——string.h/cstring就知道怎麼使用了。
  下面我們直接來看看具體實現:
 1 strcpy實現 

char* myStrcpy(char* pre, const char* next)
{
    if (pre == nullptr || next == nullptr) //空指標直接返回
    {
        return nullptr;
    }
    if (pre == next)                       // 兩者相等也無需拷貝了
        return pre;

    while ((*pre++ = *next++) != '\0');    // 依次賦值給主字元陣列

    return pre;
}

  上面程式實現了strcpy的程式,實現很簡單依次賦值給朱字元陣列即可,當遇到next指向字串結束字元’\0’後,完成賦值並且停止賦值。這樣新賦值的’\0’就成了字元陣列表示的字串結尾符,哪怕主字串pre比next長也會戛然而止。字串判斷不管字元陣列存了啥,它只認到’\0’前的數是它的主體核心部分。
 2 strcat實現  

char* myStrcat(char* pre, const char* next)
{
    if (pre == nullptr || next == nullptr) // 如果有一個為空指標,直接返回pre
        return pre;
    char* tmp_ptr = pre + strlen(pre); //strlen計算字元數,需要包含都檔案string.h,當然也可以自己實現

    while ( (*tmp_ptr++ = *next++) != '\0'); // 依次接著賦值

    return pre;
}

  上面程式實現了strcat拼接的功能,主要依靠新申請的一個指標先指向主字元陣列的尾部,然後依次將另個字元陣列字元賦值給後面的空間(可能有些人有疑惑,為什麼沒有申請額外空間就直接使用後面的空間,實際上這個是簡版的寫法,所以要求傳入指標pre指向的字元陣列有足夠大的空間,看下面完整程式你就明白了。
 3 主程式 

#include<iostream>
#include<string>
#include<string.h>

using namespace std;

char* myStrcat(char* pre, const char* next)
{
    if (pre == nullptr || next == nullptr)
        return pre;
    char* tmp_ptr = pre + strlen(pre);

    while ( (*tmp_ptr++ = *next++) != '\0');

    return pre;
}

char* myStrcpy(char* pre, const char* next)
{
    if (pre == nullptr || next == nullptr)
    {
        return nullptr;
    }
    if (pre == next)
        return pre;

    while ((*pre++ = *next++) != '\0');

    return pre;
}

int main()
{
    char str1[100] = "12345";
    char str2[20] = "hello world";
    myStrcat(str1, str2);
    myStrcpy(str1, str2);
    printf("%s\n", str1);

    return 0;
}

  個人學習記錄,由於能力和時間有限,如果有錯誤望讀者糾正,謝謝!

  轉載請註明出處:http://blog.csdn.net/FX677588/article/details/76702319

相關文章