Getline c что это
Перейти к содержимому

Getline c что это

getline (строка) в C ++

C ++ getline () — это стандартная библиотечная функция, которая используется для чтения строки или строки из входного потока. Это часть заголовка <string> . Функция getline () извлекает символы из входного потока и добавляет его к строковому объекту, пока не встретится символ-разделитель. При этом ранее сохраненное значение в строковом объекте str будет заменено входной строкой, если таковая имеется.

Функция getline () может быть представлена двумя способами:

    Синтаксис:

Параметры:

  • is: Это объект класса istream, который сообщает функции о потоке, откуда следует читать ввод.
  • str: Это строковый объект, входные данные сохраняются в этом объекте после чтения из потока.
  • delim: это символ-разделитель, который сообщает функции прекратить чтение ввода после достижения этого символа.

Возвращаемое значение: Эта функция возвращает один и тот же входной поток как есть , который принимается в качестве параметра.

Второе объявление почти такое же, как и первое. Единственное отличие состоит в том, что последний не принимает никаких символов-разделителей. Эта функция считает символ новой строки или ('/ n') символом-разделителем.

Параметры:

  • is: Это объект класса istream, который сообщает функции о потоке, откуда следует читать ввод.
  • str: Это строковый объект, входные данные сохраняются в этом объекте после чтения из потока.

Возвращаемое значение: Эта функция возвращает один и тот же входной поток как есть , который принимается в качестве параметра.

Как работает getline()?

Задача очень проста: на вход поступает количество принимаемых строк, и затем сами строки. На выход должно выйти (через пробел) количество гласных в этих строках.

Когда вместо getline() я использую обычный cin>> , то все работает, но строки попадаются с пробелами, поэтому гласные считаются некорректно. Здесь же почему-то getline() каким-то образом «перебивает» cin сверху, и считывает количество строк как еще одну строку, как я понял из теста программы (но это не точно). Собственно, почему так происходит?

И еще, у меня такое ощущение, что я решаю задачу очень топорно, есть ли какое-то более элегантное решение?
Особенно меня смущает количество проверок в предикате. Если такое решение есть, можно и без STL, ей я пользуюсь исключительно в учебных целях, закрепляю, так сказать, пройденный материал.

getline

Функция getline предназначена для ввода данных из потока, например, для ввода данных из консольного окна. Если формально описывать ее функционал, то она извлекает данные из входного потока до строкового разделителя, который не записывается в получившийся массив данных.

В итоге, получается извлечение одной строки и записывание ее в переменную. Сама конструкция getline выглядит так:

где string – переменная типа char*, в которую запишется строка, streamsize — максимально количество символов, которое может быть записано в строку, и separator – строковый разделитель, показывающий на конец строки. Последний параметр функции можно опустить, тогда будет задан сепаратор по умолчанию — ‘\n’. Приведем пример работы функции getline в программе:

Для начала нужно подключить соответствующую библиотеку iostream для работы с потоками ввода/вывода. Программа записывает 2 предложения, предложение является законченным, только если в конце стоит ’;’ или такой символ не стоит, но длина предложения 256 символов. В функции в качестве потока поставлен вывод с экрана cin, запись идет в str и разделителем является ’;’. После записи предложения выводятся на экран.

Функция getline с типом string

У функции getline есть ещё один популярный вариант, использующий строковый тип неограниченной длины string

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *