мощью директивы препроцессора:
#include <string.h>
Если в программе есть строковая переменная "a_string", то скопировать в нее
содержимое другой строки можно с помощью функции "strcpy(...)":
strcpy(a_string, "Вы напечатали строку:");
Этот оператор скопирует в массив a_string символы константной строки ""Вы
напечатали строку:"" и добавит в конец массива (т.е. присвоит 21-му элементу) за-
вершающий нуль-символ "'\0'". Вызов оператора
strcpy(a_string, another_string);
приведет к копированию строки, хранящейся в массиве "another_string", в массив
"a_string". При копировании строк важно, чтобы длина массива-приемника
("a_string") была, как минимум, (L +1), где L – длина копируемой строки
("another_string"). В противном случае вызов функции приведет к ошибке выхода за
Пределы массива, которая не обнаруживается компилятором, но может привести к
Серьезным сбоям во время выполнения программы.
Для вычисления длины строки предназначена функция "strlen(...)". Вызов
"strlen(another_string)" возвращает длину строки "another_string" (без учета нуль-
|
|
Символа).
Функция "strcmp(...)" выполняет сравнение двух переданных ей строк. Если
строки одинаковы, то эта функция возвратит 0 (т.е. "false"), а если строки различа-
Ются, то функция возвратит ненулевое значение.
Функция конкатенации (соединения) строк "strcat(...)" получает два пара-
метра-строки и копирует вторую строку в конец первой. При работе с "strcat(...)",
как и с функцией "strcpy(...)", надо обязательно следить за размером массива-
приемника. Си++ не проверяет, достаточен ли размер первого массива, переданного
72
Этой функции, для хранения соединенных строк. При малом размере массива про-
Изойдет необнаруживаемая на этапе компиляции ошибка выхода за границы массива.
Работа с библиотечными строковыми функциями продемонстрирована в про-
Грамме 5.1.
5.4 Чтение символьных строк из потока ввода с помощью функции "getline(...)"
Для ввода строк (например, с клавиатуры) пригоден оператор ">>", но его при-
Менение ограничено, поскольку этот оператор считает пробелы разделителями. До-
пустим, в программе содержатся операторы:
...
...
cout << "Введите имя: ";
cin >> a_string;
...
...
После сеанса работы со следующими экранными сообщениями:
...
...
Введите имя: Вася Иванов
...
...
Переменной "a_string" будет присвоено значение ""Вася"", т.к. оператор ">>"
Считает пробел разделителем, который сигнализирует о завершении ввода значения.
Для ввода символьных строк часто более удобной оказывается функция
|
|
"getline(...)", имеющая 2 параметра. Например, оператор:
cin.getline(a_string, 80);
Позволяет получить от пользователя строку с пробелами длиной до 79 символов (по-
Следний, 80-й символ строки – служебный нуль-символ).
В программе 5.1 демонстрируется действие функций "getline(...)",
"strcmp(...)", "strcpy(...)" и "strcat(...)".
#include <iostream.h>
#include <string.h>
const int MAXIMUM_LENGTH = 80;
Int main()
{
char first_string[MAXIMUM_LENGTH];
char second_string[MAXIMUM_LENGTH];
cout << "Введите первую строку: ";
cin.getline(first_string,MAXIMUM_LENGTH);
cout << "Введите вторую строку: ";
cin.getline(second_string,MAXIMUM_LENGTH);
cout << "До копирования строки были ";
If (strcmp(first_string,second_string))
cout << "не ";
cout << "одинаковыми.\n";
73
strcpy(first_string, second_string);
cout << "После копирования строки стали ";
If (strcmp(first_string,second_string))
cout << "не ";
cout << "одинаковыми.\n";
strcat(first_string, second_string);
cout << "После конкатенации первая строка равна: ";
cout << first_string;
return 0;
}
Программа 5.1.
Программа 5.1 в типичном сеансе работы выводит сообщения:
Введите первую строку: Строка 1.
Введите вторую строку: Строка 2.
До копирования строки были не одинаковыми.
После копирования строки стали одинаковыми.
После конкатенации первая строка равна: Строка 2.Строка 2.
Сводка результатов
Набор однотипных переменных можно представить в виде массива. Массивы
Можно передавать в качестве параметров внутрь функций. В лекции описан простой
Алгоритм сортировки массивов методом выбора наименьшего элемента. Кратко рас-
Смотрены приемы работы с двумерными массивами.
Символьные строки в Си++ хранятся в виде символьных массивов, последний
Символ в которых является служебным нуль-символом. В стандартной библиотеке
Си++ есть специальные функции для обработки символьных строк.
Упражнения
Упражнение 1
Напишите библиотеку функций для работы с целочисленными массивами.
Прототипы _______функций поместите в заголовочный файл "IntegerArray.h", а опреде-
ления – в файл реализации "IntegerArray.cpp". Библиотека должна содержать
следующие функции:
• "input_array(a,n)" для ввода с клавиатуры первых n значений массива a.
• "display_array(a,n)" для вывода на экран первых n значений массива a.
• "copy_array(a1,a2,n)" для копирования первых n элементов массива a2 в соответ-
Ствующие элементы массива a1.
• "standard_deviation(a,n)", которая вычисляет и возвращает среднеквадратическое
Отклонение первых n элементов массива a. (Для реализации этой функции может
пригодиться функция "average(a,n)" из программы 2.1.) Формула для вычисления
Среднеквадратического отклонения дана в упражнении 3 из лекции 3.
Проверьте разработанные функции с помощью подходящей тестовой программы.
74
Упражнение 2
Из функции "selection_sort(...)", рассматривавшейся в лекции, сделайте
функцию сортировки символьной строки "string_sort(...)". У этой функции один
Параметр – строка, которая должны быть отсортирована в алфавитном порядке (точ-
Нее, по возрастанию ASCII-кодов, при этом все прописные буквы будут помещены до
Строчных). Позиция завершающего нуль-символа при сортировке не меняется. Про-
Верьте работу функции с помощью тестовой программы, которая должна выводить на
экран сообщения: