Я бы просто сделал регулярное выражение и переделал его. если вы не делаете достаточного количества итераций, что это становится огромной проблемой производительности, ее проще всего кодировать (и понимать, когда вы оглядываетесь на нее)
$text = 'ignore everything except this (text)';
preg_match('#\((.*?)\)#', $text, $match);
print $match[1];
Ваш входной файл выглядит следующим образом:
3[endline]
first fr random 5[endline]
second 9[endline]
third shazam 2[endline]
Обратите внимание на добавленные мной [endline]
: они могут быть '\n',
'\r\n'
в зависимости от системы, сгенерировавшей файл.
Ваша первая инструкция:
in >> n;
a форматированное чтение ввода: вы просите прочитать целое число из файла, поэтому будут прочитаны только те символы, которые могут образовывать действительные целые числа .
Это означает, что после этой инструкции оставшаяся часть файла будет иметь вид:
[endline]
first fr random 5[endline]
second 9[endline]
third shazam 2[endline]
Остальная часть вашего кода читает необработанные байты, поэтому он также будет читать первый [endline]
(и печатать он).
Как и предполагалось в комментариях, не следует использовать массивы переменной длины , так как они не являются частью какого-либо стандарта C ++ (но являются частью стандарта C). Попробуйте вместо этого использовать стандартную библиотеку C ++ .