#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 來說,字串是一種特殊的線性表,也就是裡面的每個元素都是字元的一種線性表。可以是用陣列實現,或者鍊錶實現。具體的優缺點可以參照陣列和鍊...