170 похожих чатов

А как в перегруженном операторе ввода сделать ввод не на

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;
}

1 ответов

11 просмотров

мб это число будет хранить строка, а при вводе мы просто фором в чар заносим символ столько раз сколько нужно. у меня такая мысль

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
5
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Карта сайта