- •Работа со строками методические указания
- •Содержание
- •Цель работы
- •1. Общие положения
- •1.1 Описание символьных и строковых переменных
- •1.2 Стандартные функции работы со строками
- •1.3 Чтение символьных строк из потока ввода
- •1.3.2 С помощью функцииgetline()
- •2. Содержание работы
- •3. Требования к отчету
- •4. Контрольные вопросы
- •Приложение а
- •Приложение б Стандартные функции работы со строками
- •Приложение в Задания для самостоятельного выполнения на строки
- •Приложение г Задания для самостоятельного выполнения на массивы строк
1.3 Чтение символьных строк из потока ввода
1.3.1 С помощью оператора ">>"
Для ввода строк (например, с клавиатуры) пригоден оператор ">>", но его применение ограничено, поскольку этот оператор считает пробелы разделителями.
Допустим, в программе содержатся операторы:
cout << "Введите имя: ";
cin >> a_string;
После сеанса работы со следующими экранными сообщениями:
Введите имя: Вася Иванов
Переменной "a_string" будет присвоено значение ""Вася"", т.к. оператор ">>" считает пробел разделителем, который сигнализирует о завершении ввода значения.
1.3.2 С помощью функцииgetline()
Для ввода символьных строк часто более удобной оказывается функция getline(), имеющая 2 параметра. Например, оператор:
cin.getline(a_string, 80);
позволяет получить от пользователя строку с пробелами длиной до 79 символов (последний, 80-й символ строки – служебный нуль-символ). В следующей программе демонстрируется действие функций getline(), strcmp(), strcpy() и strcat().
#include <iostream.h>
#include <string.h>
#include <conio.h>
const int MAX_LEN = 80;
int main() {
char first_string[MAX_LEN];
char second_string[MAX_LEN];
cout << "Введите первую строку: ";
cin.getline(first_string,MAX_LEN);
cout << "Введите вторую строку: ";
cin.getline(second_string,MAX_LEN);
cout << "До копирования строки были ";
if ( strcmp(first_string,second_string) )
cout << "не ";
cout << "одинаковыми.\n";
strcpy( first_string, second_string );
cout << "После копирования строки стали ";
if ( strcmp(first_string,second_string) )
cout << "не ";
cout << "одинаковыми.\n";
strcat( first_string, second_string);
cout << "После конкатенации первая строка равна: ";
cout << first_string;
getch();
return 0;
}
Программа в типичном сеансе работы выводит сообщения:
Введите первую строку: Строка 1.
Введите вторую строку: Строка 2.
До копирования строки были не одинаковыми.
После копирования строки стали одинаковыми.
После конкатенации первая строка равна: Строка 2.Строка 2.
2. Содержание работы
1. Составьте и отладьте программу решения следующей задачи.
Задана строка произвольной длины. Найдите количество символов в данной строке.
Указание: Используйте фрагмент программы следующего вида:
…
cout << "Введите слово";
cin>>s;
n=strlen(s);
cout <<”n=”<<n;
…
2 Дополните полученную программу. Определите, начинается ли слово со слога «Не».
Указание: Воспользуйтесь условным оператором вида:
if (s[0]=’Н’ && s[1]=’е’) cout <<”да, начинается”;
else cout <<”нет, не начинается”;
3 Дополните полученную программу. Определите, сколько раз встречается буква «а» в данном слове.
Пример возможного решения:
…
k=0;
for (i=0; i<strlen(s); i++)
if (s[i]==’a’) k=k+1;
cout <<”k=”<<k;
...
4 Выполните задание из указанного преподавателем варианта приложения B.
5 Составьте и отладьте программу решения следующей задачи.
Задан список из 7 слов произвольной длины. Найдите все слова списка, заканчивающиеся на букву «и».
Указание: Опишите переменную s как переменную типа array[1..7] of string;
Далее воспользуйтесь следующим программным фрагментом:
…
for (i=0; i<7; i++) {
cout << "Введите слово";
cin>>s[i];
};
cout << “Заканчиваются на букву и”;
for (i=0; i<7; i++) {
n=strlen(s[i]);
if (s[i][n]==’и’) cout << s[i];
}
...
4.6 Выполните задание из указанного преподавателем варианта приложения Г.