Как ввести несколько строк в c

от admin

Лабораторная работа № 5

Цель работы: получить навыки программирования задач с использованием строкового типа данных на языке С++.

Теоретические сведения

Символьная строка (далее просто строка) является массивом типа char, который заканчивается нуль-символом (‘\0’).

Описание переменных строкового типа

Переменную строкового типа можно описать следующими способами:

как массив символов:

а) char имя_массива[n];

где n — количество символов в строке, включая завершающий нуль-символ. Например, char stroka[10];

б) char имя_массива[ ];

Например, char s[ ];

В описании а) для переменной stroka будет выделено 10 байтов памяти ЭВМ. В описании б) память выделена не будет. Это описание означает, что переменная s — это переменная строкового типа, длина которой не определена.

с использованием указателя на тип char. Например, char *stroka;

В данном описании память для переменной stroka не выделяется. Такое описание означает, что переменная stroka может содержать адрес ячейки памяти первого символа строки. Выделить память для переменной stroka можно с помощью функции new:

char *stroka=new char[20];

где 20 — это длина строки.

Инициализация переменных строкового типа

Задать значения переменным строкового типа можно с помощью строковых констант:

а) char stroka [10]=»строка»;

б) char stroka [ ]=»строка»;

В первом случае под переменную stroka отводится 10 байтов, но используются только первые 7 байтов (включая завершающий нуль-символ ‘\0’).

Во втором случае переменная stroka занимает 7 байтов, т.е. для этой переменной память выделяется автоматически и ее размер определяется количеством символов строковой константы плюс завершающий нуль-символ.

Инициализация массива строк

где n — количество элементов массива, т.е. количество строк; m — длина строки.

Пример 5.1.

сhar mas_words [10][80];

Ввод строки

Операция >> вводит строку из (MAX_LEN-1) символов, не содержащую пробелов. Значащих символов в строке может быть не более, чем (MAX_LEN-1), так как строка обязательно содержит завершающий нулевой байт ‘\0’, который служит признаком завершения строки. Особенность операции >> состоит в том, что пробел она воспринимает как нулевой символ, то есть как признак конца строки.

Если строка содержит пробелы, то для ее считывания используется метод класса istream cin.get(). Мы пока не будем останавливаться на подробностях использования методов классов — речь об этом пойдет в соответствующем разделе, связанном с объектно-ориентированным программированием. Для работы со строками достаточно знать, что оператор

позволяет ввести с клавиатуры строку str, не превышающую (MAX_LEN-1) символов.

Пример 5.2. Ввод строки, содержащей пробелы.

cout << «Введите строку: «;

cout << «Введенная строка:» << str << endl;

Для ввода строки можно также воспользоваться методом getline.

Пример 5.3. Ввод строки, содержащей пробелы.

cout << «Введите строку: «;

cout << «Введенная строка:» << str << endl;

Методы работают почти одинаково. Различие состоит в том, что метод getline считывает из входного потока не более (MAX_LEN-1) символов и записывает их в указанную строковую переменную, заменяя символ перевода строки \n нулевым байтом. Символ перевода строки при этом из потока удаляется.

Метод get оставляет символ перевода строки в потоке. Поэтому при попытке ввода нескольких строк, как показано в примере 5.4, будет введена лишь первая строка. Вместо всех остальных окажутся пустые строки, так как символ \n, оставленный в потоке методом get при вводе первой строки, будет обнаружен следующим методом get и интерпретируется как ввод пустой строки. При этом сам символ \n так и остается в потоке.

Пример 5.4. Попытка ввода нескольких строк.

cout << «Введите строку: «;

cout << «Введенная строка:» << str << endl;

cout << «Введите строку: «;

cout << «Введенная строка:» << str << endl; // пустая строка

cout << «Введите строку: «;

cout << «Введенная строка:» << str << endl; // пустая строка

Удаление символа \n из потока может быть осуществлено вызовом метода get() без параметров.

Пример 5.5. Ввод нескольких строк.

cout << «Введите строку: «;

cout << «Введенная строка:» << str << endl; //вывод

cout << «Введите строку: «;

cout << «Введенная строка:» << str << endl; //пустая строка

cout << «Введите строку: «;

cout << «Введенная строка:» << str << endl; //пустая строка

Однако, можно в примере 5.4 воспользоваться методом getline вместо метода get. Тогда эффекта потери строк не возникает, и нет необходимости специально удалять символ \n из потока.

Современные версии языка С++ позволяют вводить несколько строк, пользуясь методом get с тремя аргументами: имя строковой переменной, длина строки и символ завершения ввода. Тогда символ перевода строки не будет служить признаком завершения ввода строки. Теперь строки можно вводить до тех пор, пока не будет введен символ, объявленный признаком завершения ввода, или пока не будет превышен максимальный размер строки.

Пример 5.6. Ввод нескольких строк.

cout << «Введите строку: «;

cout << «Введенная строка:» << str << endl;

В результате получится:

Якорь выбран чугунный

И в открытых лагунах

Наши старые шхуны

Снова лижет прибой.

Якорь выбран чугунный

И в открытых лагунах

Наши старые шхуны

Снова лижет прибой.

Ввод строки можно осуществить также с помощью функции gets (char *). Эта функция читает строку со стандартного устройства ввода (клавиатуры) до тех пор, пока не встретится символ новой строки (‘\n’). Функция считывает все символы до символа новой строки и присоединяет нуль-символ в конец строки.

char * stroka = new char [20];

Ввести строку можно и c помощью функции scanf с использованием формата “%s”, но эта функция считывает символы до символа разделителя (пробел, табуляция, переход на новую строку) или по количеству символов в спецификации формата (%10s). Это очень неудобно, так как практически всегда требуется вводить строку с символами-разделителями. Поэтому функция scanf менее предпочтительна.

Как ввести несколько строк в C ++?

Я изучаю C ++. Я хочу использовать в качестве входных данных многострочную строку, но не могу. Я использую для этого getline() , но он вводит только одну строку. Когда я нажимаю клавишу ввода для записи следующей строки, она перестает принимать ввод и печатает первую строку.

Читать:
Как рассылать спам на php

Я хочу дать ответ, как в примере ниже

Но требуется только ввод первой строки.

Пожалуйста, помогите мне узнать, как я могу это сделать. Спасибо.

2 ответа

Вы можете читать только одну строку за раз с std::getline , если вы не укажете свой собственный разделитель. Если вы хотите накапливать несколько строк по одной, вам нужно место для размещения результата. Определите вторую строку. Прочтите строку в s с помощью std::getline , а затем добавьте s к строке результата. Нравится:

Либо вы пишете цикл для чтения отдельных строк и объединения их в одну строку, это то, что предлагает этот ответ. Если вас устраивает обозначение определенного символа для обозначения конца ввода, вы можете использовать перегрузку getline , которая принимает разделитель в качестве параметра:

Пользователь должен будет ввести x , чтобы завершить ввод, поэтому этот ввод

Приведет к такому выводу:

Конечно, это не сработает, если вводимая строка содержит x , что делает такой подход бесполезным.

Однако вместо использования «настоящего» символа в качестве разделителя вы можете использовать символ EOF (EOF = конец файла) следующим образом:

Затем ввод завершается тем, что ваш терминал интерпретирует как EOF , например, Ctrl-d в Linux.

Работа со строками

Довольно большое количество задач, которые могут встретиться при разработке приложений, так или иначе связано с обработкой строк — парсинг веб-страниц, поиск в тексте, какие-то аналитические задачи, связанные с извлечением нужной информации из текста и т.д. Поэтому в этом плане работе со строками уделяется особое внимание.

В языке C# строковые значения представляет тип string , а вся функциональность работы с данным типом сосредоточена в классе System.String . Собственно string является псевдонимом для класса String. Объекты этого класса представляют текст как последовательность символов Unicode. Максимальный размер объекта String может составлять в памяти 2 ГБ, или около 1 миллиарда символов.

Создание строк

Создавать строки можно, как используя переменную типа string и присваивая ей значение, так и применяя один из конструкторов класса String:

Конструктор String имеет различное число версий. Так, вызов конструктора

6 раз повторит объект из первого параметра, то есть фактически создаст строку «aaaaaa».

Еще один конструктор принимает массив символов, из которых создается строка

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

Строка как набор символов

Так как строка хранит коллекцию символов, в ней определен индексатор для доступа к этим символам:

Применяя индексатор, мы можем обратиться к строке как к массиву символов и получить по индексу любой из ее символов:

Используя свойство Length , как и в обычном массиве, можно получить длину строки.

Перебор строк

Класс String реализует интерфейс IEnumerable, благодаря чему строку можно перебрать в цикле foreach как набор объектов char. Также можно с помощью других типов циклов перебрать строку, применяя обращение к символам по индексу:

Сравнение строк

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

Многострочные строки

Начиная с C# 11 с помощью трех пар двойных кавычек можно оформить многострочный текст, в том числе с применением интерполяции:

Основные методы строк

Основная функциональность класса String раскрывается через его методы, среди которых можно выделить следующие:

Compare : сравнивает две строки с учетом текущей культуры (локали) пользователя

CompareOrdinal : сравнивает две строки без учета локали

Contains : определяет, содержится ли подстрока в строке

Concat : соединяет строки

CopyTo : копирует часть строки, начиная с определенного индекса в массив

EndsWith : определяет, совпадает ли конец строки с подстрокой

Format : форматирует строку

IndexOf : находит индекс первого вхождения символа или подстроки в строке

Insert : вставляет в строку подстроку

Join : соединяет элементы массива строк

LastIndexOf : находит индекс последнего вхождения символа или подстроки в строке

Replace : замещает в строке символ или подстроку другим символом или подстрокой

Программирование на C, C# и Java

Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы

ОСТОРОЖНО МОШЕННИКИ! В последнее время в социальных сетях участились случаи предложения помощи в написании программ от лиц, прикрывающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в посторонних группах ВК. Для связи с нами используйте исключительно эти контакты: vscoderu@yandex.ru, https://vk.com/vscode

Перенос строки в TextBox с Multiline

Покажем, как выполнить перенос строки в TextBox с атрибутом Multiline (когда текстовое поле занимает несколько строк). Сделаем это на примере программы в Windows Forms и языка C#.

Создание интерфейса программы для демонстрации переноса строки в TextBox

Создадим проект Windows Forms. На окне формы расположим два элемента управления: кнопку (Button) и текстовое поле (TextBox). В кнопке параметру Text зададим значение «Прочитать файл», поскольку текст в TextBox будем считывать из файла.

Далее займёмся настройкой TextBox. Нажмите правой кнопкой на данном элементе управления и перейдите к Свойствам.

Значение атрибута Multiline установим, как True. Это позволит выводить в TextBox текст в несколько строк, а не в одну.

Изменение значения параметра Multiline у TextBox

Далее активируем полосы прокрутки у TextBox. Это позволит удобнее просматривать и работать с многострочным текстом. Для активации параметр ScrollBars переведём в положение Both — полосы будут по обоим измерениям: по горизонтали и по вертикали.

Активация полос прокрутки ScrollBars в TextBox

Растянем TextBox по горизонтали до низа формы и получим нечто подобное:

Программа для переноса строки в TextBox с атрибутом Multiline и ScrollBars

Интерфейс программы готов.

Создание кода программы для показа возможности перехода на новую строку в TextBox

В Visual Studio два раза щёлкнем на кнопку (Button). Откроется редактор кода обработки нажатия на кнопку. Добавим следующие строки:

Похожие статьи