#include "String.h" #include String::String() { str[0] = '\0'; } String::String(char c) { str[0] = c; str[1] = '\0'; } String::String(const char c_arr[]) { int i = 0; for (i = 0; i < STRING_SIZE; i++) { if (c_arr[i] == '\0') break; str[i] = c_arr[i]; } str[i] = '\0'; } int String::length() const { /* int len = 0; while (str[len] != '\0') { len++; } return len; */ int i; for (i = 0; i < STRING_SIZE; i++) { if (str[i] == '\0') break; } return i; } char String::operator[](int index) const // accessor, getter { // if (index>=0 && index= 0 && index < length()); return str[index]; } char& String::operator[](int index) // mutator, setter { // if (index>=0 && index= 0 && index < length()); return str[index]; } String& String::operator+=(const String& str2) { int len = length(); int i=0; while (str2.str[i] != '\0') // bug here: str2[i] --> str2.str[i] { str[len + i] = str2.str[i]; i++; if (len + i >= capacity()) break; } str[len + i] = '\0'; return *this; } bool String::operator==(const String& str2) const { int len1 = length(); int len2 = str2.length(); if (len1 != len2) return false; int i; for (i = 0; i < len1; i++) { if (str[i] != str2.str[i]) return false; } return true; } // whether current string object is a substring of str2 bool String::operator<=(const String& str2) const { int len1 = length(); int len2 = str2.length(); if (len1 >= len2) return false; for (int i = 0; i <= len2 - len1; i++) { if (substr(i, i + len1 - 1) == (*this)) return true; } return false; } // whether current string object is strictly a substring of str2 bool String::operator<(const String& str2) const { return (*this <= str2 && !(*this == str2)); } String String::substr(int start, int end) const { if (start < 0) start = 0; if (start > length()) return String(); if (start > end) return String(); if (end >= length()) end = length() - 1; String rlt; int i; for (i = start; i <= end; i++) { rlt.str[i - start] = str[i]; } rlt.str[i - start] = '\0'; return rlt; } int String::findchar(int start, char c) { if (start < 0) start = 0; if (start > length() - 1) return -1; int i; int len = length(); for (i = start; i < len; i++) { if (str[i] == c) return i; } return -1; } std::ostream& operator<<(std::ostream& out, String& s) { out << s.str; return out; } std::istream& operator>>(std::istream& in, String& s) { char c; int i = 0; while (!in.eof()) { in >> c; s.str[i] = c; i++; } s.str[i] = '\0'; return in; } int main() { String s1('a'); String s2("abc"); std::cout << s1 << std::endl; std::cout << s2 << std::endl; std::cout << s2[1] << std::endl; s1 += s2; std::cout << s1 << std::endl; String s4 = s1.substr(0, 1); std::cout << s4 << std::endl; }