Что в рассматриваемые далее программы этот заголовочный файл включается с по-

мощью директивы препроцессора:

#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-кодов, при этом все прописные буквы будут помещены до

Строчных). Позиция завершающего нуль-символа при сортировке не меняется. Про-

Верьте работу функции с помощью тестовой программы, которая должна выводить на

экран сообщения:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: