struct String { char *str;
Во всех задачах вы сдаете только реализацию нужных методов.
Например, для задачи "напишите конструктор по умолчанию" вы должны сдать только строки
String::String() { ... }
Объявление класса String и реализацию других методов сдавать не нужно.
Формально. В начало вашей программы добавляется код:
#include <iostream> #include <cstring> using namespace std; #include#include using namespace std; class String { public: char *str; int realSize; int capSize; public: String(const char *_str); String(); String(const String &s); ~String(); void Print(); String operator+(const String &s); String operator+(const char *s); String &operator=(const String &s); String operator^(int value); void operator+=(const String &s); void operator+=(const char *s); char &operator[](int value); friend ostream &operator<<(ostream &os, const String &s); friend istream &operator>>(istream &is, String &s); int Find(const String &s); int Find(const char *_str); int Find(char symbol); };
А в конец main() c кодом теста.
Напишите конструкторы и деструктор, который освобожает память и выводит "... destructed" и перевод на новую строку (см. пример).
Также напишите функцию Print(), которая выводит строку и затем перевод строки.
Тест | Вывод |
---|---|
String s; String s1 = "abc"; String s2 = s1; String s3 = String("de"); s1.Print(); s.Print(); s2.Print(); s3.Print(); |
abc abc de de destructed abc destructed abc destructed destructed |
(Пустые строки и пробел в начале последней строки вывода обеспечиваются строкой, созданной конструктором по умолчанию)
Определите операции ввода вывода:
ostream &operator<<(ostream &os, const String &s) и istream &operator>>(istream &is, String &s)
Тест | Вывод |
---|---|
String s1, s2 = "abc"; std::cout << s2 << endl; std::cin >> s1; // ввод defgh std::cin >> s2; // ввод qwerty std::cout << s1 << endl; std::cout << s2 << endl; std::cout << s1 << s2 << endl; |
abc defgh qwerty defgh qwerty defghqwerty qwerty desrtucted defgh desrtucted |
Определите операции сложения(склеивания) строк:
String operator+(const String &s); String operator+(const char *s); void operator+=(const String &s); void operator+=(const char *s);
Тест | Вывод |
---|---|
String s1 = "abc", s2 = "de"; String s3 = s1 + s2; s1 += s2; s1 += "**"; std::cout << s1 << endl << s2 << endl << s3 << endl; |
abcde** de abcde abcde desrtucted de desrtucted abcde** desrtucted |
Определите внешние операции сравнения на равенство строк, чтобы можно было сравнивать String со String и String с char*.
Тест | Вывод |
---|---|
String s1("abc"); String s2 = "abc" String s3 = " abc"; char *str = "abc"; std::cout << (s1 == s2) << " " << (s1 != s2) << endl; std::cout << (s1 == s3) << " " << (s1 != s3) << endl; std::cout << (s1 == s1) << " " << (s1 != s1) << endl; std::cout << (s1 == str) << " " << (s1 != str) << endl; std::cout << (s1 == "abc") << " " << (s1 != "abc") << endl; std::cout << ("abc" == s1) << " " << ("abc" != s1) << endl; |
1 0 0 1 1 0 1 0 1 0 1 0 abc desrtucted abc desrtucted abc desrtucted |
Определите операции поиска в строке, чтобы можно было искать в объекте String подстроки String, char* и символы (char).
Функции должны возвращать позицию первого вхождения символа или подстроки или -1.
Тест | Вывод |
---|---|
String s1("abcdefghijk"); String s2 = "cde"; char *str = "abc"; std::cout << s1.Find(s2) << s1.Find(str) << s1.Find("j") << s1.Find('e') << endl; std::cout << s1.Find(String("aa")) << s1.Find("cdee") << s1.Find('z') << endl; |
2094 -1-1-1 aa desrtucted cde desrtucted abcdefghijk desrtucted |