1024 символа, а на такое количество символов, которое ввел пользователь?
class MyString
{
private:
char* str;
public:
//конструктор по-умолчанию
MyString();
//конструктор инициализации
MyString(const char* str);
//конструктор копирования
MyString(const MyString& object);
//деструктор для освобождения памяти
~MyString();
//перегрузка оператор присваивания=
//friend MyString& operator=(const MyString& object);
MyString& operator =(const MyString& object);
//перегрузка оператора вывода <<
friend std::ostream& operator <<(std::ostream& output, const MyString& object);
//перегрузка оператора ввода >>
friend std::istream& operator >>(std::istream& input, MyString& object);
};
//конструктор по-умолчанию
MyString::MyString() :str{ nullptr }{}
//конструктор инициализации
MyString::MyString(const char* str)
{
int lenght = strlen(str);
this->str= new char[lenght + 1]; //выделяем память под строку и под завершающий символ '\0'
for (int i = 0; i < lenght; ++i)
{
this->str[i] = str[i]; //посимвольное присваивание строки
}
this->str[lenght] = '\0'; //указание на окончание строки
}
//конструктор копирования
MyString::MyString(const MyString& object)
{
if (this->str != nullptr)
{
delete[] str;
}
int lenght = strlen(object.str);
this->str = new char[lenght + 1]; //выделяем память под строку и под завершающий символ '\0'
for (int i = 0; i < lenght; ++i)
{
this->str[i] = object.str[i]; //посимвольное присваивание строки
}
this->str[lenght] = '\0'; //указание на окончание строки
}
//деструктор для освобождения памяти
MyString::~MyString() { delete[] str; }
//перегруженный оператор вывода <<
std::ostream& operator <<(std::ostream& output, const MyString& object)
{
if (object.str == nullptr)
{
return output;
}
else
{
return output << object.str;
}
}
//перегруженный оператор ввода >>
std::istream& operator >>(std::istream& input, MyString& object)
{
char* tmpStr = new char[1024];
input >> tmpStr;
int len = strlen(tmpStr);
object.str = new char[len + 1];
for (int i = 0; i <= len; ++i)
{
object.str[i] = tmpStr[i];
}
delete[] tmpStr;
object.str[len] = '\0';
return input;
}
//перегруженный оператор присваивания =
MyString& MyString::operator =(const MyString &object)
{
if (this->str != nullptr)
{
delete[] this->str;
}
int lenght = strlen(object.str);
this->str = new char[lenght + 1];
for (int i = 0; i <= lenght; i++)
{
this->str[i] = object.str[i];
}
this->str[lenght] = '\0';
return *this;
}
int main()
{
MyString s1 = "Hello";
std::cout << "First string: " << s1 << std::endl;
MyString s2;
std::cin >> s2;
std::cout << "Second string: " << s2 << std::endl;
return 0;
}
мб это число будет хранить строка, а при вводе мы просто фором в чар заносим символ столько раз сколько нужно. у меня такая мысль
Обсуждают сегодня