/* string.h * */ #ifndef _MYSTRING_ #define _MYSTRING_ #include <cstring> #include <iostream> class MyString { friend bool operator==(const MyString&, const MyString &); friend std::ostream& operator<<(std::ostream&, const MyString &); private: char *str_; int length_; MyString(int); public: MyString(); MyString(char); MyString(const char *); MyString(const MyString &); MyString& operator=(const MyString &); ~MyString(); int length() const; int indexOf(char, int = 0) const; bool isSubstring(const MyString &) const; bool isSubstring(const char *) const; MyString& concat(const MyString &); MyString& concat(const char *); void printStr(void) const; bool operator!(void) const; char& operator[](int); char operator[](int) const; operator char*(); /* outward class conversion into char * */ }; bool operator==(const MyString&, const MyString &); std::ostream& operator<<(std::ostream&, const MyString &); inline MyString::MyString() { length_ = 0; str_ = new char[1]; str_[0] = '\0'; } inline MyString::MyString(char ch) { length_ = 1; str_ = new char[2]; str_[0] = ch; str_[1] = '\0'; } inline int MyString::length() const { return length_; } inline void MyString::printStr(void) const { std::cout << "length: " << length_ << ", value: \"" << str_ << "\""; } #endif