// Class implementation file: cstrlib.cpp // Implementation section #include #include #include #include "cstrlib.h" string::string() { data[0] = '\0'; } string::string(const char str[MAX_STRING_SIZE]) { strcpy(data, str); } string::string(const string &str) { strcpy(data, str.data); } int string::length() { return strlen(data); } char string::nth_char(int n) { assert((n >= 1) && (n < MAX_STRING_SIZE)); return data[n - 1]; } void string::append_char(char ch) { int length = strlen(data); assert(strlen(data) < MAX_STRING_SIZE - 1); data[length] = ch; data[length + 1] = '\0'; } boolean string::operator == (const string &str) { return strcmp(data, str.data) == 0; } boolean string::operator < (const string &str) { return strcmp(data, str.data) < 0; } boolean string::operator > (const string &str) { return strcmp(data, str.data) > 0; } boolean string::operator <= (const string &str) { return (strcmp(data, str.data) < 0) || (strcmp(data, str.data) == 0); } boolean string::operator >= (const string &str) { return (strcmp(data, str.data) > 0) || (strcmp(data, str.data) == 0); } boolean string::operator != (const string &str) { return strcmp(data, str.data) != 0; } string& string::operator = (const char str[MAX_STRING_SIZE]) { strcpy(data, str); return *this; } string& string::operator = (const string &str) { strcpy(data, str.data); return *this; } istream& operator >> (istream &is, string &str) { is >> str.data; return is; } ostream& operator << (ostream &os, const string &str) { os << str.data; return os; }