我們自己寫的string類具有以下函式
string(const char *s); //用c字串s初始化
string(int n,char c); //用n個字元c初始化
string& string(string& str);
const string& operator=(string& str);
~string();
過載下標訪問運算子
char &operator(int n);
char &at(int n)const;
int size()const;
//返回當前字串的大小,string內部不會在我們每一次的字串連線的時候都會分配空間,
//它會多分配一些記憶體,下次連線時的字串小於剩下的空間它就不用再為這個字串分配另外的空間了。
//它分配的所有空間就是size,而字串的實際長度length
int length()const; //返回當前字串的長度
bool empty()const; //當前字串是否為空
為了方便輸入和輸出
istream& operator>>(istream& input, string& str);
ostream& operator<
過載+運算子
string &operator+=(string &s);
bool operator==(const string &s1,const string &s2)const;
int compare(const string &s) const;//比較當前字串和s的大小
這個實現的string類是比較簡單的,c++標準模板庫裡面的string類的方法是非常多的,而且非常複雜。
在這裡僅僅給大家演示string內部大概的實現方法
#ifndef string_h//標頭檔案衛士,避免標頭檔案被多次編譯
#define string_h
#include//輸入輸出標頭檔案
using namespace std; //命名空間
class string;
#endif
#include"string.h" //包含類的宣告標頭檔案
#define ext_len 50 //定義乙個巨集,使用者申請的記憶體大小,我們實際上為字串分配的空間要多ext_len,以便字串的連線
string::string(const char* pstr)
string::string(int n, char c) //構造乙個由n個一種字串構成的字串
m_nreallen = n; //賦值字串大小
m_nbuffsize = n + ext_len; //分配的空間大小}
string::~string()
m_nreallen = 0; //對字串的長度清零
m_nbuffsize = 0; //對分配的空間清零 }
string::string(string& str)
m_pbuff = new char[str.length() + ext_len];//重新分配一段空間
//strcpy(m_pbuff, str.m_pbuff);
memcpy(m_pbuff, str.m_pbuff, str.length()); //字串的拷貝
m_nreallen = str.length(); //實際長度等於字串的字元長度
m_nbuffsize = m_nreallen + ext_len;}
const string& string::operator=(const string& str)
if (m_pbuff) //如果左運算元的字串首位址指向記憶體,就銷毀再指向空
m_pbuff = new char[str.length() + ext_len]; //分配空間
//strcpy(m_pbuff, str.m_pbuff);
memcpy(m_pbuff, str.m_pbuff, str.length());
m_nreallen = str.length();
m_nbuffsize = m_nreallen + ext_len;
return *this; //返回左運算元的引用}
char string::operator(int npos)const
char string::at(int npos)const
return m_pbuff[npos];}
int string::size()const
int string::length()const
bool string::empty()const
const string& string::operator+=(const string& str)
else //需要重新分配空間情況
m_pbuff = p; //將拼接好的字串賦值給物件指向字串首位址的指標
}return *this;
}istream& operator>>(istream& input, string& str)
ostream& operator<
return output;
}
#include#include"string.h"
int main()
在這裡我們只是學習怎麼去建立乙個類,實現這個類,運算子的過載和友元函式…進行了簡單的測試
本文源自【人生之旅_諳憶的部落格】
自己寫的 string 類
現在很多面試題都是要求寫乙個string類,主要檢查big 3,也就是主要檢查建構函式,析構函式和賦值函式.不要告訴我你以為是 姚明,麥蒂,阿泰.這也是很考驗基本功的乙個題目.我今天自己寫了乙個mystring類,順便加上了stradd函式用於字串相加,get函式用於輸出.詳細 如下,說明見注釋.i...
C 中如何定義string類?
string類使用起來比較方便,在本課程的開始我們就學習了 string 類。之所以那麼早就學習 string 就是希望大家能夠用 string代替c 風格的字串。目前為止,我們學習了如何定義類,以及如何為類定義運算子過載函式。今天我們就來定義乙個類似於 string 功能的自己的 string 類...
c 自定義string類
1.標頭檔案部分 define crt secure no warnings pragma once include includeusing namespace std class mystring 2.函式定義部分 include mystring.h mystring mystring mys...