資料結構之 字串過載函式的實現

2021-09-11 19:38:49 字數 3143 閱讀 7031

#pragma once

#includeconst int defaultsize = 128;

class astring ;

#include"astring.h"

#include//建構函式,構造乙個最大長度為sz的字串

astring::astring(int sz /*= defaultsize*/)

m_ncurlength = 0; //當前長度預設為0

m_ch[0] = '\0'; //要新增乙個字串結束標誌

}//建構函式,由乙個已有的字串構造乙個新的字串

astring::astring(const char* init)

strcpy_s(m_ch, len_obj + 1, init); //copy字串

m_ncurlength = len_obj; //字串當前長度賦值

}//複製建構函式,有乙個已有的字串物件obj構造乙個新的物件

astring::astring(const astring& obj)

strcpy_s(this->m_ch, strlen(obj.m_ch) + 1, obj.m_ch); //賦值obj字串的內容

this->m_ncurlength = obj.m_ncurlength; //擋牆長度賦值

}//析構函式,釋放記憶體

astring::~astring()

//獲取字串的長度

int astring::length()const

//()過載,用於獲取乙個子字串,從下標beg開始,到ends結束

astring astring::operator()(const int beg, int len)

else

tmp.m_ch[len] = '\0'; //給返回字串新增字串結束標誌

tmp.m_ncurlength = len;

} return tmp;

}//==過載判斷字串是否相等

bool astring::operator == (const astring& obj)

//!=過載,判斷兩個字串是否不等

bool astring::operator != (const astring & obj)

//!過載,判斷字串是否為空

bool astring::operator ! ()const

//賦值運算子的過載

astring& astring::operator = (const astring& obj)

strcpy_s(this->m_ch, strlen(obj.m_ch) + 1, obj.m_ch); //賦值obj字串的內容

this->m_ncurlength = obj.m_ncurlength; //擋牆長度賦值

} else

return *this; //將本物件返回

}//+= 運算子的過載

astring& astring::operator += (const astring &obj)

//strcpy_s(m_ch, len_this, tmp); //為新分配記憶體的字串賦值,先將臨時儲存的原字串賦值進去

for (int i = 0; i < len_this; i++)

delete tmp;

} //strcat_s(this->m_ch, len_obj + 1, obj.m_ch); //將引數字串新增到末尾

for (int i = 0; i < len_obj; i++)

this->m_ch[len_total] = '\0';

this->m_ncurlength = len_total;

return *this;

}//獲取*this的第i個字元

char& astring::operator (const int pos) const

return m_ch[pos];

}//輸入函式過載

std::istream& operator >> (std::istream& in, astring& obj)

for (int i = 0; i < obj.m_ncurlength + 1; i++)

strtmp[i] = obj.m_ch[i];

delete obj.m_ch; //刪除原有記憶體

obj.m_nmaxsize += defaultsize; //最大容量擴容

obj.m_ch = new char[obj.m_nmaxsize + 1]; //申請新記憶體

for (int i = 0; i < strlen(strtmp) + 1; i++) //將原有字串賦值到新記憶體中

obj.m_ch[i] = strtmp[i];

delete strtmp; //釋放臨時記憶體

} obj.m_ch[count] = ch_get;

++obj.m_ncurlength;

++count;

//in >> ch_get;

} obj.m_ch[obj.m_ncurlength] = '\0';

return in;

}//輸出函式過載

std::ostream& operator <<(std::ostream& out, const astring& obj)

//若串obj與*this中的子字串匹配,則返回子字串的位置,否則返回-1

int astring::find(const astring& obj)

return -1;

}

Redis之資料結構之字串實現

redis是比較常用的儲存工具了,對於它的徹底了解有利於你的開發和工作。面試官 我們知道redis是用c語言實現的,那麼redis的資料結構是c語言的字串嗎?a 是的。面試官 那麼回去等通知吧。b redis的字串和普通的字串實現是不一樣的,因為redis作為乙個經常用到的儲存工具,其效能是要求非常...

資料結構之字串

夢醒瀟湘love 1 串的相關概念 1 串 string 是由零個或多個字元組成的有限序列,又名叫字串。2 串中含有的字元資料稱為串的長度,零個字元的串稱為空串 null string 它的長度為零。3 子串與主串,串中任意個數的連續字元組成的子串行稱為該串的子串,相應地,包含子串的串稱為主串。4 ...

資料結構之 字串

一 簡介 字串或者說串 string 是由數字 字母。下劃線組成的一串字元。一般可以記為s a0a1a2a3.an n 0並且n是有限非負整數 從資料結構上來看,用c 來說,字串是一種特殊的線性表,也就是裡面的每個元素都是字元的一種線性表。可以是用陣列實現,或者鍊錶實現。具體的優缺點可以參照陣列和鍊...