#include "myString.h" #include #include myString::myString() : size(0), data(NULL) {} myString::myString(char* s) : size(strlen(s)) { data = new char[size]; strncpy(data, s, size); } myString::myString(myString const& s) { size = s.size; data = new char[size]; strncpy(data, s.data, size); } myString::~myString() { delete[] data; } myString const& myString::operator=(myString const& s) { if (this != &s) { delete[] data; size = s.size; data = new char[size]; strncpy(data, s.data, size); } } bool myString::operator<(myString const& s) const { int t = strncmp(data, s.data, std::min(size, s.size)); return t < 0 || (t == 0 && size < s.size); } bool myString::operator<=(myString const& s) const { int t = strncmp(data, s.data, std::min(size, s.size)); return t <= 0 || (t == 0 && size <= s.size); } bool myString::operator>(myString const& s) const { return s < (*this); } bool myString::operator>=(myString const& s) const { return s <= (*this); } bool myString::operator==(myString const& s) const { return size == s.size && strncmp(data, s.data, std::min(size, s.size)) == 0; } char const& myString::operator[](int ind) const { return data[ind]; } char& myString::operator[](int ind) { return data[ind]; } myString& myString::append(myString const& s) { char* newData = new char[size + s.size]; strncpy(newData, data, size); strncpy(newData + size, s.data, s.size); delete[] data; size += s.size; data = newData; return (*this); } myString& myString::reserve(int n) { char* newData = new char[size + n]; strncpy(newData, data, size); delete[] data; size += n; data = newData; return (*this); } int myString::length() const { return size; } std::ostream& operator<<(std::ostream& os, myString& s) { os.write(s.data, s.size); return os; } std::istream& operator>>(std::istream& is, myString& s) { if (s.data != NULL) is.read(s.data, s.size); return is; }