- •Лекция 5.
- •6. Строки
- •6.1 Символьный тип char
- •Упражнения
- •6.3 Строки, управление вводом/выводом и операции над строками
- •6.3.1 Форматированный потоковый вывод
- •6.3.2 Функции, объявленные в библиотеке string.H
- •Присвоение значений строкам
- •Инициализация строки
- •Функция strcpy
- •Функция strdup
- •Функция strncpy
- •Определение длины строки
- •Функция strlen
- •Конкатенация строк
- •Функция strcat
- •Функция strncat
- •Сравнение строк
- •Функция strcmp
- •Функция stricmp
- •Функция strncmp
- •Функция strnicmp
- •Функция strrchr
- •Функция strspn
- •Функция strcspn
- •Функция strpbrk
- •Поиск строк
- •Функция strstr
- •Функция strtok
Упражнения
Если в упражнении сказано «дана строка», то ее можно считать при помощи инструкции вида cin>>S или при помощи функции getline. Если сказано, что дана строка, содержащая пробелы, то ее необходимо считывать при помощи функции getline.
-
Даны две строки. Определите, совпадают ли они сравнив их посимвольно. Напишите для этого функцию bool Compare(string S1, string S2).
-
Напишите программу, которая по данному числу k от 1 до 120 печатает фразу «Мне k лет», меняя значение k на введенное число, а вместо слова «лет» печатая при необходимости слово «год» в правильном склонении.
-
Дана строка, содержащая пробелы. Найдите, сколько в нем слов (слово – это последовательность непробельных символов, слова разделены одним пробелом, первый и последний символ строки – не пробел).
Вход: одна строка. Выход: количество слов в строке.
-
Дана строка, содержащая пробелы. Найдите в ней самое длинное слово, выведите на экран это слово и его длину.
Вход: одна строка, содержащая пробелы. Слова разделены ровно одним пробелом. Выход: самое длинное слово в строке и его длина.
-
Дана строка. Известно, что она содержит ровно две одинаковые буквы. Найдите эти буквы.
Вход: одна строка. Выход: одна буква, которая встречается в строке дважды.
-
Даны две строки. Определите, является ли первая строка подстрокой второй строки.
Вход: две строки. Выход: слово yes, если первая строка является подстрокой второй строки, или слово no в противном случае.
6.3 Строки, управление вводом/выводом и операции над строками
Здесь подробнее рассматриваются операции консольного ввода/вывода. C++, как и его предок — язык C — не определяет операции ввода/вывода как часть языка, а выносит операции консольного ввода/вывода в библиотеки ввода/вывода.
Рассмотрим небольшую выборку функций ввода/вывода, объявляемых в заголовочных файлах stdio.h и iostream.h.
6.3.1 Форматированный потоковый вывод
C++ имеет целое семейство гибких библиотек функций ввода/вывода. Разработчикам языка было ясно, что функции ввода/вывода из stdio.h, унаследованные из С, имеют ряд ограничений. В результате в C++ было введено понятие потоков.
Потоки, которые уже существовали в языке С, означают последовательность данных, передаваемых из одной части компьютера в другую. В программах, рассматриваемых ранее, мы уже использовали операцию помещения в поток «, например — в стандартный поток вывода, cout. Встречалась нам и операция извлечения из потока », применяемая к стандартному потоку ввода, cin.
В этом разделе мы познакомимся с потоковыми функциями width и precision, используемыми при форматировании вывода. Библиотеки потоков C++ содержат большое количество таких функций, позволяющих настроить ваш вывод.
Функция width задает ширину поля вывода. Общая форма использования функции width с потоком cout:
cout.width (widthOf Output);
Функция precision определяет количество значащих цифр после точки для чисел с плавающей точкой. Общая форма использования функции precision с потоком cout:
cout.precision(numberOfDigits);
Программа, в которую ничего не вводится, а лишь выводятся форматированные целые числа, числа с плавающей точкой и символы с использованием функций width и precision, приведена в следующем примере:
// Программа иллюстрирует потоковый форматированный вывод в C++
// с использованием функций width и precision
#include <iostream.h>
int main()
{
int anInt = 67;
unsigned char aByte = 128;
char aChar = '@';
float aSingle = 355.1112;
double aDouble = 1.131112e+002;
// Вывод простых выражений
cout.width(3); cout << int(aByte) << " + ";
cout.width(2); cout << anInt << " = ";
cout.width(3); cout << (aByte + anInt) << endl;
cout.precision(3); cout << aSingle << " / ";
cout << aDouble << " =";
cout.width(7); cout.precision(4); cout << (aSingle / aDouble) << endl;
cout << "Символьная переменная aChar: "<< aChar << endl;
return 0;
}