1. 程式人生 > >C++每日練筆之字串連線函式

C++每日練筆之字串連線函式

//===============================寫在前面===============================
在標準C++中,有兩種形式的字元:
分別是C語言的C風格字串和C++標準庫中的string類。

其中C風格的字串以字元陣列 char*或者char[]來實現,
但是功能很弱,而且很不安全。

標準C++採用類模板的形式來封裝字串,建議使用。

標頭檔案說明:

C風格字串: 
#include <string.h> //這是C語言和非標準C++用的老式的標頭檔案
#include <cstring>  //這是標準C++用的新式的標頭檔案
//string.h和cstring在功能上基本類似
//只是後者的內容都放在名稱空間std中

標準C++的string類標頭檔案
#include <string> //所有內容放在名稱空間std中

注1:
    string.h和cstring基本相同,後者是前者的替代版本。
    但是和string完全是兩個不同的標頭檔案。

注2:在MFC中還有一個功能更強大的類CString類來處理字串
//==========================================================================
對於C風格的字串,操作很不安全,
包括C++提供的兩個字串連線函式strcat和strncat。
因此我寫了多個函式用於字串連線,並放在名稱空間TYCppStdLib中。

其中我寫的strcat和同樣是不安全的。
但相比C++提供的strcat要好一點,避免了因為空指標而程式崩潰的情況。
另外我寫的五個過載函式strcatEx利用安全的string為中間媒介,安全可靠。
//==========================================================================
/*- ==========================================================
*     檔名  :TYStringAndCharFunc.h
*     開發人員:袁培榮
*     當前版本:1.0.0.2595
*     建立時間:2012-04-23
*     修改時間:2012-04-30
*     功能說明:字串處理函式
*     版權說明:版權所有 袁培榮 YuanPeirong 
*     編譯環境:Windows 7(x64) SP1 簡體中文專業版
*     編譯器:  Visual Studio 2010 SP1(中文旗艦版)
                MinGW 2011118
                Visual C++ 6.0 SP6(中文企業版)
- ==========================================================*/

#ifndef TYStringAndCharFunc_H_TYCppStdLib
#define TYStringAndCharFunc_H_TYCppStdLib

#ifdef TYStringAndCharFunc_DLL_API
#else
#define TYStringAndCharFunc_DLL_API _declspec(dllimport)
#endif

#include <string>

using namespace std;

namespace TYCppStdLib
{   
    //String
    
    //Char
        //獲取字元的ACSII碼
    TYStringAndCharFunc_DLL_API int Asc(char ch);
    TYStringAndCharFunc_DLL_API int Asc(char *ch);
    
    
    
    //StringAndChar
        //字串連線
    TYStringAndCharFunc_DLL_API void strcat(
        char *s,          //C風格字串,連線結果存於s中
        char *d           //C風格字串
    ); //與std中的strcat同名,呼叫時加TYCppStdLib:: 除錯模式出錯
    
    TYStringAndCharFunc_DLL_API string strcatEx(
        const char *c1,   //C風格字串
        const char *c2    //C風格字串
    ); //以string型別返回c1和c2連線後的字串
    
    TYStringAndCharFunc_DLL_API string strcatEx(
        const char *c1,   //C風格字串
        const string &s2  //C++string字串
    ); //以string型別返回c1和s2連線後的字串
    
    TYStringAndCharFunc_DLL_API string strcatEx(
        const string &s1, //C++string字串
        const char *c2    //C風格字串
    ); //以string型別返回s1和c2連線後的字串
    
    TYStringAndCharFunc_DLL_API void strcatEx(
        const char *c1,   //C風格字串
        string &s2        //C++string字串
    ); //將c1和s2連線後的字串存於s2中
    
    TYStringAndCharFunc_DLL_API void strcatEx(
        string &s1,       //C++string字串
        const char *c2    //C風格字串
    ); //將s1和c2連線後的字串存於s1中

}

#endif

/*- ==========================================================
*     檔名  :TYStringAndCharFunc.cpp
*     開發人員:袁培榮
*     當前版本:1.0.0.2595
*     建立時間:2012-04-23
*     修改時間:2012-04-30
*     功能說明:字串處理函式
*     版權說明:版權所有 袁培榮 YuanPeirong 
*     編譯環境:Windows 7(x64) SP1 簡體中文專業版
*     編譯器:  Visual Studio 2010 SP1(中文旗艦版)
                MinGW 2011118
                Visual C++ 6.0 SP6(中文企業版)
- ==========================================================*/

#ifndef TYStringAndCharFunc_DLL_ForAPI
#define TYStringAndCharFunc_DLL_ForAPI

#define TYStringAndCharFunc_DLL_API _declspec(dllexport)

#endif

#include "../../Include/StringAndChar/TYStringAndCharFunc.h"
#include <cstring>

using namespace std;

void TYCppStdLib::strcat(char *s, char *d)
{
    int i, ls, ld;
    if(!s || !d)
        return;
    ls=strlen(s);
    ld=strlen(d);
    for(i=0;i<=ld;i++)
        s[ls+i]=d[i]; 
}

string TYCppStdLib::strcatEx(const char *c1, const char *c2)
{
    string s1="",s2="";
    if(c1)
        s1=c1;
    if(c2)
        s2=c2;
    return (s1+s2);
}

string TYCppStdLib::strcatEx(const char *c1, const string &s2)
{
    string s1="";
    if(c1)
        s1=c1;
    return (s1+s2);
}

string TYCppStdLib::strcatEx(const string &s1, const char *c2)
{
    string s2="";
    if(c2)
        s2=c2;
    return (s1+s2);
}

void TYCppStdLib::strcatEx(const char *c1, string &s2)
{
    string s1="";
    if(c1)
        s1=c1;
    s2=s1+s2;
}

void TYCppStdLib::strcatEx(string &s1, const char *c2)
{
    string s2="";
    if(c2)
        s2=c2;
    s1=s1+s2;
}