Как работает getline()?
Задача очень проста: на вход поступает количество принимаемых строк, и затем сами строки. На выход должно выйти (через пробел) количество гласных в этих строках.
// Подсчет гласных в строке #include #include #include #include using namespace std; class count_predicate < public: bool operator()(const char& expr) < if ( expr == 'a' || expr == 'o' || expr == 'i' || expr == 'u' || expr == 'y' || expr == 'e' ) return true; return false; >>; int main() < int N; // Нужное количество строк cin >> N; string strs[N]; for (int i = 0; i < N; i++) getline(cin, strs[i]); for (int i = 0; i < N; i++) < int n = count_if(strs[i].begin(), strs[i].end(), count_predicate()); cout return 0; >
Когда вместо getline() я использую обычный cin>> , то все работает, но строки попадаются с пробелами, поэтому гласные считаются некорректно. Здесь же почему-то getline() каким-то образом «перебивает» cin сверху, и считывает количество строк как еще одну строку, как я понял из теста программы (но это не точно). Собственно, почему так происходит? И еще, у меня такое ощущение, что я решаю задачу очень топорно, есть ли какое-то более элегантное решение?
Особенно меня смущает количество проверок в предикате. Если такое решение есть, можно и без STL, ей я пользуюсь исключительно в учебных целях, закрепляю, так сказать, пройденный материал.
Отслеживать
219k 15 15 золотых знаков 119 119 серебряных знаков 230 230 бронзовых знаков
Обработка пользовательского ввода в С++ с помощью getline

В сегодняшней статье мы поговорим о функции getline() в C++. Это встроенная функция, которая позволяет выводить в консоль все, вводимые с клавиатуры, символы. При работе с пользовательским вводом в C++ cin объект позволяет нам получать входную информацию от пользователя. Но когда мы пытаемся обработать информацию, введенной пользователем с несколькими значениями, возвращается только первая часть строки. Это происходит потому, что компилятор C++ предполагает, что любой пробел завершает программу при получении ввода. То есть строка «Меня зовут Mихаил» будет возвращать только слово «Меня» при выводе информации.
#include ;
using namespace std;
/* Строка введенная пользователем:
«Меня зовут Mихаил»
*/
cin >> str;
В приведенном выше коде пользователю предлагается ввести строку. В моем случае это — «Меня зовут Mихаил». Но при запуске программы вывелось только первое слово «Меня».
Далее мы увидим, как использовать функцию getline() для получения остальных символов строки.
#include
using namespace std;
В приведенном выше примере мы передали в функцию getline() два параметра: getline(cin, str);. Первый параметр — это объект для обработки клавиатурного ввода — cin, а второй — str строковая переменная. Когда мы запустим код, нам будет предложено ввести текст. После того, как вы это сделаете, нажмите Enter и увидите вывод, который содержит весь текст из вашего ввода, а не только первый символ. В моем случае я набрал строку из нескольких символов и вышел из консоли. Продолжайте и попробуйте, чтобы увидеть, как это работает. Таким образом, благодаря функции getline() этому вы можете эффективно работать с пользовательским вводом в своих программах.
Заключение В этой статье мы говорили о getline() функции, которая позволяет нам получить несколько символов из ввода пользователя. Мы впервые увидели, что происходит, когда мы получаем от пользователя строку из нескольких символов — возвращается только первый символ. Затем мы увидели, как получить все символы из строки с помощью getline() функции, которая принимает два параметра — объект cin и строковую переменную.

![]()
Создано 17.01.2023 10:07:10
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
- Кнопка:
Она выглядит вот так: - Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт - BB-код ссылки для форумов (например, можете поставить её в подписи):
Комментарии ( 0 ):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2024 Русаков Михаил Юрьевич. Все права защищены.
Для чего лучше использовать getline, а для чего cin?
Основное отличие это, то что getline функция, а cin объект. Но как это влияет на использование?
- Вопрос задан более трёх лет назад
- 722 просмотра
Комментировать
Решения вопроса 0
Ответы на вопрос 2

getline для получения текста написанного до нажатия клавиши enter, cin для получения текста до первого пробела(то есть » » .
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
getline
Функция getline предназначена для ввода данных из потока, например, для ввода данных из консольного окна. Если формально описывать ее функционал, то она извлекает данные из входного потока до строкового разделителя, который не записывается в получившийся массив данных.
В итоге, получается извлечение одной строки и записывание ее в переменную. Сама конструкция getline выглядит так:
cin . getline ( string , streamsize , separator ) ;
где string – переменная типа char*, в которую запишется строка, streamsize — максимально количество символов, которое может быть записано в строку, и separator – строковый разделитель, показывающий на конец строки. Последний параметр функции можно опустить, тогда будет задан сепаратор по умолчанию — ‘\n’. Приведем пример работы функции getline в программе:
using namespace std ;
char str [ 256 ] ;
cout << "Введите четыре предложения: " << endl ;
cin . getline ( str , 256 , ';' ) ;
cin . getline ( str , 256 , ';' ) ;
Для начала нужно подключить соответствующую библиотеку iostream для работы с потоками ввода/вывода. Программа записывает 2 предложения, предложение является законченным, только если в конце стоит ’;’ или такой символ не стоит, но длина предложения 256 символов. В функции в качестве потока поставлен вывод с экрана cin, запись идет в str и разделителем является ’;’. После записи предложения выводятся на экран.
Функция getline с типом string
У функции getline есть ещё один популярный вариант, использующий строковый тип неограниченной длины string