Прохожу онлайн курсы по С++. Дошел до задания, которое не могу вкурить. Помогите пожалуйста разобраться.
Задание
В этой задаче вам необходимо написать функцию getline, которая читает строку из стандартного потока ввода cin. Конец строки достигается, если прочитан символ '\n' или поток ввода прочитан полностью. Если прочитан символ '\n', то сохранять его в строку не нужно. Не забудьте, что строка должна оканчиваться нулевым символом. Всю выделенную динамически память, кроме результирующей строки, необходимо освободить - будьте внимательны! Указатель возвращенный из getline будет освобожден с помощью delete[].
Замечания:
выделяйте и освобождайте память в стиле C++, функция ничего не должна выводить (Sample Output в примере — это возвращаемое значении функции в формате длина:строка).
Sample Input:
Hello
, world!
Sample Output:
5:Hello
8:, world!
Дают шаблон функции:
#include <iostream>
using namespace std;
char *getline() {
// put your code here
}
Я написал функцию:
#include <iostream>
using namespace std;
char *getline() {
int i = 0;
char c = '\0';
char * b = new char[1000];
while (cin.get(c)) {
i++;
if (c == '\n')
break;
b[i-1] = c;
}
cout << i-1 << ":" << b;
delete [] b;
}
Но она не проходит проверку на сайте курса, видимо где то я накосячил. И не совсем понятно как выделять память под строку размер которой ты не знаешь.
Вот дополнительные пояснения от преподавателя:
...нужно реализовать функцию getline, которая читает ровно одну строку, т. е. либо доходит до символа '\n', либо до конца входного потока (т. е. до состояния, когда в потоке не осталось символов). Больше ничего делать не надо (никакого дополнительного вывода, никакого main и тд). Функция main уже написана, она вызывает функцию getline, которую собственно вам и требуется реализовать. Надеюсь условия задания теперь понятны. Теперь касательно свободной памяти, тут вопрос не о количестве байт, а количестве выделенных участков. Так как размер строки, которую нужно прочитать не известен заранее, вполне возможно, что придется перевыделять память, и нужно позаботится о том, что старый участок памяти будет освобожден. Т. е. в результате функция должна вернуть указатель на единственный выделенный участок памяти, в котором будет храниться прочитанная строка, а все остальные выделенные участки памяти (если, конечно, они были выделены) должны быть освобождены.
Но один хрен, не пойму, что нужно сделать