/* * string-test.cc */ #include "String.h" #include using namespace std; using IDA_String::String; int main() { String s1; // default ctor cout << "s1: " << s1 << endl; String s2{ "FOO" }; // converting ctor, C string to String cout << "s2: " << s2 << endl; String s3{ s2 }; // copy ctor cout << "s3: " << s3 << endl; String s4{ 'C', '+', '+' }; cout << "s4: " << s4 << endl; String s5(3, 'W'); // ctor for three 'W'. Note, no {} here! cout << "s5: " << s5 << endl; String s6{std::move(s5)}; // move ctor cout << "s6: " << s6 << endl; cout << "s5: " << s5 << endl; s5 = std::move(s6); // move assignment optor cout << "s5: " << s5 << endl; cout << "s6: " << s6 << endl; s3 = "FIE"; // converting assignment optor, C string to String cout << "s3: " << s3 << endl; // relational optors if (s2 < s3) cout << "s2 < s3" << endl; else if (s2 > s3) cout << "s2 > s3" << endl; else cout << "s2 == s3" << endl; s3 = s2; // copy assignment optor cout << "s3: " << s3 << endl; // equality optors if (s2 != s3) cout << "s2 != s3" << endl; else cout << "s2 == s3" << endl; // empty? if (s3.empty()) cout << "s3 is empty." << endl; else cout << "s3 is not empty." << endl; // + optors cout << "s2 + \"L\": " << s2 + "L" << endl; cout << "\"L\" + s2: " << "L" + s2 << endl; cout << "s2 + s3: " << s2 + s3 << endl; // += optors s2 += "L"; cout << "After s2 += \"L\", s2: " << s2 << endl; s3 += s2; cout << "After s3 += s2, s3: " << s3 << endl; // indexing optors s3[3] = 'L'; cout << "s3[3] = 'L';" << endl; s3[4] = 'S'; cout << "s3[4] = 'S';" << endl; s3[6] = 'M'; cout << "s3[6] = 'M'; " << endl; cout << "s3: " << s3 << endl; cout << "s3.at(0): " << s3.at(0) << endl; cout << "s3.length(): " << s3.length() << endl; s2 = 'X'; // converting assignment optor, char to String cout << "After s2 = 'X', s2: " << s2 << endl; s2 += 'Y'; // += for char cout << "After s2 += 'Y', s2: " << s2 << endl; cout << "s2 + 'Z': " << s2 + 'Z' << endl; cout << "'W' + s2: " << 'W' + s2 << endl; // at() for safe indexing try { cout << "s3.at(7): " << s3.at(7) << endl; } catch (const exception& e) { cout << e.what() << endl; } // clear cout << "s2.clear();" << endl; s2.clear(); if (s2.empty()) cout << "s2 is empty." << endl; else cout << "s2 is not empty." << endl; // type conversion cout << "const char* p = s2.c_str();" << endl; const char* p1 = s2.c_str(); cout << "p1: " << p1 << endl; cout << "const char* p2 = static_cast(s3);" << endl; const char* p2 = static_cast(s3); cout << "p2: " << p2 << endl; // I/O String s7; cout << "Type a word: "; cin >> s7; cout << "cin >> s7;" << endl; cout << "s7: " << s7 << endl; cout << "Type a line: "; cin >> ws; getline(cin, s7); cout << "getline(cin, s7);" << endl; cout << "s7: " << s7 << endl; cout << "Type another line (' ' is break character): "; cin >> ws; getline(cin, s7, ' '); cout << "getline(cin, s7, ' ');" << endl; cout << "s7: " << s7 << endl; return 0; }