Типы данных в языке C++__________________________________675

«Текст не найден». Если же поиск прошел успешно, то осуществляются следую-
щие операции. Сначала в символ, на который указывает St, засылается 0 — это эк-
вивалентно нулевому символу. Таким образом выделяется первая часть строки S1,
расположенная до заменяемого текста. Затем указатель St сдвигается на длину за-
меняемого текста, которая определяется функцией strlen. После этой операции St
начинает указывать на первый символ в строке S1 после заменяемого текста. Сле-
дующий оператор формирует в буфере S текст с заменой и отображает его в метке
Labell. Формирование текста осуществляется вложенными вызовами функций
strcat и strcpy. Сначала срабатывает вложенный вызов strcpy. Он копирует в S
строку, на которую указывает S1. Но поскольку вместо первого символа заменяе-
мого текста мы занесли нулевой символ, то скопирована будет только начальная
часть строки S1 до этого символа. Затем срабатывает вложенный вызов strcat и к
тексту, сформированному в S добавляется строка S3. Последний внешний вызов
strcat добавляет к сформированному тексту часть строки S1, расположенную
после замененного фрагмента. Именно на эту часть строки указывает St.

Чтобы это стало понятнее, разберем пример. Пусть строка S1 содержит текст
«Маша ела кашу», строка S2 содержит текст «ела», а строка S3 — «съела». Зна-
чит строка S1 представляет собой массив:

'М','а','ш','а',' ','е','л','а',' ','к','а','ш','у','\0'

После выполнения функции strstr указатель St будет указывать на шестой
символ — букву 'е'. После того, как в этот символ заносится нуль, строка S1 имеет
вид:

'М','а','ш','а',' ','\0','л','а',' ','к','а','ш','у','\0'

После изменения Pt он начинает указывать на девятый символ — пробел по-
сле слова «ела». После вызова strcpy в строку S копируется первая часть строки
S1, завершающаяся нулевым символом:

'М','а','ш','а',' ','\0'
После вложенного вызова strcat к строке S добавляется текст строки S3:

'М','а','ш','а',' ','с','ъ','е','л','а','\0'

И после внешнего вызова strcat к S добавляется строка, на которую указывает
St, т.е. часть строки S1, начинающаяся с пробела после «ела»:

М','а','ш','а',' ','с','ъ','е','л','а',' ','к','а','ш','у','\0'

В качестве последнего примера рассмотрим использование функции sprintf.
Пусть в приложении имеется окно редактирования Editi, в котором пользователь
вводит фамилию сотрудника, и компонент CSpinEditI типа TCSpinEdit, в котором
вводится год рождения. Вы хотите сформировать строку вида «Сотрудник ..., ...
г.р.», в которой вместо точек должны подставляться введенные данные: фамилия
и год. Это можно сделать следующим кодом:

ftinclude <stdio.h>
char S [40];

sprintf(S,"Сотрудник %s, %i г.p.",Editl->Text,CSpinEditl->Value);

Первый аргумент функции sprintf — формируемая строка. Второй — строка
форматирования (ее полное описание см. в главе 14 в разделе 14.4.1). Она указыва-
ет текст формируемой строки и содержит спецификаторы, записываемые после
символа «% », которые указывают формат включения в строку аргументов, список
которых расположен в вызове sprintf после строки форматирования. В данном
случае первый из этих параметров — текст в окне Editi, вводимый со специфика-
тором %s, что означает строку, а второй параметр — значение года в компоненте
CSpinEditI, вводимое со спецификатором %i, что означает целое число.

22*