#include #include #include #include "str.h" String::String(const char *pStr) { m_length = ::strlen(pStr); m_pStr = new char[m_length + 1]; ::strcpy(m_pStr, pStr); } String::String(const String &r) { m_length = r.m_length; m_pStr = new char[m_length + 1]; strcpy(m_pStr, r.m_pStr); } String::String(char ch, size_t n) { m_pStr = new char[n + 1]; ::memset(m_pStr, ch, n); m_pStr[n] = '\0'; m_length = n; } String::String(const char *pStr, size_t n) { m_pStr = new char[n + 1]; ::memcpy(m_pStr, pStr, n); m_pStr[n] = '\0'; m_length = n; } void String::Disp() const { ::puts(m_pStr); } void String::Add(const char *pStr) { m_length = m_length + strlen(pStr); char *pNewStr = new char[m_length + 1]; ::strcpy(pNewStr, m_pStr); ::strcat(pNewStr, pStr); delete [] m_pStr; m_pStr = pNewStr; } void String::Add(const String &r) { m_length = m_length + r.m_length; char *pNewStr = new char[m_length + 1]; ::strcpy(pNewStr, m_pStr); ::strcat(pNewStr, r.m_pStr); delete [] m_pStr; m_pStr = pNewStr; } void String::Delete(size_t index1, size_t index2) { if (index2 == NPOS) index2 = m_length - 1; size_t newSize = m_length - (index2 - index1 + 1); char *pNewStr = new char[newSize + 1]; ::memcpy(pNewStr, m_pStr, index1); ::memcpy(pNewStr + index1, m_pStr + index2 + 1, m_length - index2 - 1); pNewStr[newSize] = '\0'; m_length = newSize; delete [] m_pStr; m_pStr = pNewStr; } size_t String::Find(char ch) const { char *pStr = ::strchr(m_pStr, ch); if (pStr) return pStr - m_pStr; return NPOS; } size_t String::Find(const char *pStr) const { char *pStrFind = ::strstr(m_pStr, pStr); if (pStrFind) return pStrFind - m_pStr; return NPOS; } String &String::operator=(const String &r) { if (this == &r) return *this; delete [] m_pStr; m_length = r.m_length; m_pStr = new char[m_length + 1]; ::strcpy(m_pStr, r.m_pStr); return *this; } String & String::operator=(const char *pStr) { delete [] m_pStr; m_length = ::strlen(pStr); m_pStr = new char[m_length + 1]; ::strcpy(m_pStr, pStr); return *this; } #if 1 int printf(const char *format, ...); int main(void) { String str; str = "Ankara"; // str = String("Ankara") -----> str.operator=(String("Ankara")) str.Disp(); return 0; } #endif