C/C++實現strcpy和strcat兩個功能
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
相關文章
- strlen strcat strcpy strcmp 自己實現
- 用C語言寫strcat、strcpy、strlen、strcmpC語言
- C中atoi和strcpy的自定義實現
- 實現C中的strcpy函式函式
- JS和C#實現的兩個正則替換功能示例分析JSC#
- 也用 C++ 實現 Property 功能 (轉)C++
- memmove和memcpy 以及strcmp strcpy幾個庫函式的實現memcpy函式
- C/C++ Y/N 重複輸入功能實現C++
- c語言字串處理報錯 warning,C4996,sprintf,deprecated,C4996,strcpy,C4996,strcatC語言字串996
- 用C++實現下載檔案的功能C++
- 演算法學習記錄五(C++)--->兩個棧實現佇列演算法C++佇列
- C++過載加號運算子實現兩個結構體的相加C++結構體
- 【C++】兩個類的相互引用C++
- [C++]實現memcpyC++memcpy
- C++ binder 實現C++
- C++ 引用 (交換兩個數的值)C++
- C語言(C++語言)中##(兩個井號)和#(一個井號)用法[轉]C語言C++
- C++ Qt開發:TabWidget實現多窗體功能C++QT
- Visual C++ 6.0程式設計實現列印功能(轉)C++程式設計
- 牛頓插值 C++ 和 Matlab實現C++Matlab
- 一個有限狀態機的C++實現C++
- C++取反交換兩個數的值C++
- C++ 一種交換兩個數的思路C++
- C++ - 比較兩個浮點數大小C++
- 命令模式(c++實現)模式C++
- 堆排序(實現c++)排序C++
- 堆排序c++實現排序C++
- Visual C++實現檔案間批次轉換功能 (轉)C++
- 選擇排序和插入排序(C++實現)排序C++
- 手寫一個HTTP框架:兩個類實現基本的IoC功能HTTP框架
- C++實現10個數前m個數和後10-m轉換位置C++
- 【C++】實現一個簡單的單例模式C++單例模式
- 實現一個簡單的C++協程庫C++
- C/C++—— C++編譯器是如何實現多型C++編譯多型
- C++ 中兩個類互相引用的問題C++
- C++箴言:理解typename的兩個含義(轉)C++箴言
- c中strcpy函式的使用注意:(來源:c和指標)函式指標
- Callback在C\C++中的實現C++