Задачка с курса по С++, но сам решить не смог, может кто поможет.
Реализуйте функцию getline, которая считывает поток ввода посимвольно, пока не достигнет конца потока или не встретит символ переноса строки ('\n'), и возвращает C-style строку с прочитанными символами.
Обратите внимание, что так как размер ввода заранее неизвестен, то вам нужно будет перевыделять память в процессе чтения, если в потоке ввода оказалось больше символов, чем вы ожидали.
Память, возвращенная из функции будет освобождена оператором delete[]. Символ переноса строки ('\n') добавлять в строку не нужно, но не забудьте, что в конце C-style строки должен быть завершающий нулевой символ.
Требования к реализации: при выполнении данного задания вы можете определять любые вспомогательные функции, если они вам нужны. Определять функцию main не нужно.
Ниже приведенный код хоть и отрабатывает но не принимается грейдером. Я так понял что инициализацию динамического массива надо делать внутри цикла и освобождать память здесь же.
#include <iostream>
char *getline()
{
char c = '\n';
int p = 8;
int i = 0;
char *str = new char [p];
while(std::cin.get(c) && c != '\n') {
if (i > p) {
p = p*2;
std::cout << "i=" << i << "p=" << p << '\n';
char *strNew = new char [p];
for(int z=0; z<i;z++)
strNew[z] = str[z];
delete [] str;
char *str = new char [p];
for(int z=0; z<i;z++)
str[z] = strNew[z];
delete [] strNew;
}
str[i] = c;
std::cout << "ix=" << i << "p=" << p << "str = " << str[i] << '\n';
i++;
}
str[i+1] = '\0';
return str;
}
main() {
std::cout << getline();
return 0;
}