C 中標準庫std string的實現

2021-08-21 16:00:48 字數 4804 閱讀 8013

以下實現了c++標準模板庫中std::string中的部分實現,參考了cplusplus.

關於c++中標準模板庫std::string的介紹和用法可以參考:

實現**string.hpp如下:

#ifndef fbc_stl_string_hpp_

#define fbc_stl_string_hpp_

#include namespace fbcstd ; // class string

inline string::string()

inline string::string(const string& str)

inline string::string(const string& str, size_t pos, size_t len)

else

buffer_[size_] = '\0'; }}

inline string::string(const char* s)

inline string::string(const char* s, size_t n)

else

}inline string::string(size_t n, char c)

inline string::~string()

inline const char* string::c_str() const

inline size_t string::length() const

inline size_t string::size() const

inline char& string::operator (size_t pos)

inline const char& string::operator (size_t pos) const

inline string& string::operator = (const string& str)

inline string& string::operator = (const char* s)

inline string& string::operator = (char c)

inline string& string::operator += (const string& str)

inline string& string::operator += (const char* s)

inline string& string::operator += (char c)

inline string& string::assign(const string& str)

inline string& string::assign(const char* s)

inline char& string::at(size_t pos)

inline const char& string::at(size_t pos) const

inline void string::clear()

inline int string::compare(const string& str) const

inline int string::compare(const char* s) const

inline const char* string::data() const

inline bool string::empty() const

static inline string operator + (const string& lhs, const string& rhs)

static inline string operator + (const string& lhs, const char* rhs)

static inline string operator + (const char* lhs, const string& rhs)

static inline string operator + (const string& lhs, char rhs)

static inline string operator + (char lhs, const string& rhs)

static inline bool operator == (const string& lhs, const string& rhs)

static inline bool operator == (const char* lhs, const string& rhs)

static inline bool operator == (const string& lhs, const char* rhs)

static inline bool operator != (const string& lhs, const string& rhs)

static inline bool operator != (const char* lhs, const string& rhs)

static inline bool operator != (const string& lhs, const char* rhs)

static inline bool operator < (const string& lhs, const string& rhs)

static inline bool operator < (const char* lhs, const string& rhs)

static inline bool operator < (const string& lhs, const char* rhs)

static inline bool operator <= (const string& lhs, const string& rhs)

static inline bool operator <= (const char* lhs, const string& rhs)

static inline bool operator <= (const string& lhs, const char* rhs)

static inline bool operator > (const string& lhs, const string& rhs)

static inline bool operator > (const char* lhs, const string& rhs)

static inline bool operator > (const string& lhs, const char* rhs)

static inline bool operator >= (const string& lhs, const string& rhs)

static inline bool operator >= (const char* lhs, const string& rhs)

static inline bool operator >= (const string& lhs, const char* rhs)

} // namespace fbcstd

#endif // fbc_stl_string_hpp_

測試**test_string.cpp如下:

#include #include "string.hpp"

#define std fbcstd

int main()

// constructor

std::string str1 = "csdn: ";

std::string str2 = "";

fprintf(stdout, "str1: %s\n", str1.c_str());

std::string str3("github: ");

fprintf(stdout, "str3: %s\n", str3.c_str());

} return 0;

}

cmakelists.txt內容如下:

project(samples_stl_implementation)

cmake_minimum_required(version 3.0)

set(cmake_c_flags "$ -g -wall -o2 -std=c11")

set(cmake_cxx_flags "$ -g -wall -o2 -std=c++11")

include_directories($/src)

message(status "project source dir: $")

file(glob tests $/test/*.cpp)

foreach (test $)

string(regex match "[^/]+$" test_file $)

string(replace ".cpp" "" test_basename $)

add_executable($ $)

target_link_libraries($ pthread)

endforeach()

指令碼build.sh內容如下:

#! /bin/bash

real_path=$(realpath $0)

dir_name=`dirname "$"`

echo "real_path: $, dir_name: $"

new_dir_name=$/build

mkdir -p $

cd $

cmake ..

make

cd -

編譯及測試方法:將終端定位到samples_stl_implementation目錄下,執行:$ ./build.sh , 然後再執行$ ./build/test_string即可。

github

c 標準庫 std string 補充類

c 標準庫中sting類 缺失了很多常用功能 比如編碼轉換,文字分割,空格去除,字元全域性替換,計算md5等功能 該類單檔案,方便使用,開袋即食 pragma once include include namespace str util int len widechartomultibyte cp...

C 中標準模板庫std vector的實現

以下實現了c 標準模板庫std vector的部分實現,參考了 cplusplus.關於c 中標準模板庫std vector的介紹和用法可以參考 實現 vector.hpp內容如下 ifndef fbc stl vector hpp define fbc stl vector hpp include...

C 中標準Dispose模式的實現

摘要 c 程式中的dispose方法,一旦被呼叫了該方法的物件,雖然還沒有垃圾 但實際上已經不能再使用了。所以使用上要仔細考慮細節。需要明確一下c 程式 或者說.net 中的資源。簡單的說來,c 中的每乙個型別都代表一種資源,而資源又分為兩類 託管資源 由clr管理分配和釋放的資源,即由clr裡ne...