Замечание

Пример

Имя массива символов (s) является как именем массива, так и адресом его нулевого элемента(как для любого массива в С++).

Строку можно описать как строку символов.

В конце строки всегда присутствует нуль - символ (\0), который служит признаком конца строки.

Пример

Строковые константы заключаются в двойные кавычки. Строковые константы используются в операторах вывода, могут включать управляющие последовательности.

Можно использовать указатель на структуру.

Пример:

sotr *uk; uk = &c2;

 

При использовании указателя на структуру, для доступа к полям вместо точки нужно указывать оператор -> (стрелку).

 

Пример:

cout << "Фамилия "<< uk->familia; cout << "Адрес "<< uk->adres;cout << "Телефон "<< uk->telefon;

 

1.6.2. Способы реализации строк

В классическом С++ нет специального строкового типа.

 

Возможны три варианта реализации строк:

1) строковые константы;

2) указатель на символьную строку;

3) массив символов.

 

Рассмотрим каждый из этих вариантов.

1.6.3. Строковые константы

cout<<"Введите х"; // "Введите х" – строковая константаcout <<"Введите х\0";

Нуль-символ можно не указывать, в этом случае он будет добавлен автоматически.

 

1.6.4. Указатель на символьную строку

Можно описать указатель на строку символов.

char *s="Фамилия";cout << s;

Указателю s можно присвоить адрес другой символьной строки

s="Отчество";cout << s;

 

 

1.6.5. Массив символов

Пример: char s[20]="Фамилия";

 

Количество элементов массива должно быть на 1 больше, чем символов в строке. "Лишний" символ нужен для хранения нуль-символа.

 

Размер массива (длину строки) можно не указывать. В этом случае он (размер) будет определен автоматически.

 

Пример: char s[]="Фамилия";

Размер массива s будет равен 8.

 

1.6.6. Некоторые функции для работы со строками

Функции библиотеки string.h (обработка строк)

strcpy (s1, s2) – копирует строку s2 в массив символов s1

 

strcat (s1,s2) –добавляет строку s2 в массив символов s1 (дописывает строку s2 в конец строки s1)

 

strcmp(s1,s2) – сравнивает строки s1 и s2. Если s1<s2, то будет возвращено отрицательное значение, если s1=s2, будет возвращен 0, если s1>s2, будет возвращено положительное значение (сравнение происходит по ASCII-кодам символов)

 

strlen(s1) – возвращает длину строки без учета нуль-символа

 

strtok(s1,s2) – выделяет слово из строки s1, в качестве разделителей используются символы из строки s2. При повторных вызовах функции вместо s1 указывается NULL.

Пусть массив символов fam содержит фамилию, ima - имя, otsh - отчество, сформируем из них новый массив fio, который будет содержать фамилию, имя и отчество

#include<iostream.h>#include<string.h> void main(){char fio[45],fam[15], ima[15], otsh[15]; cout << "\nВведите данные: \n Фамилия ";cin >> fam;cout << "\nИмя ";cin >> ima;cout << "\nОтчество ";cin >> otsh; strcpy(fio,fam);strcat(fio," ");strcat(fio,ima);strcat(fio," ");strcat(fio,otsh); cout << fio;}

Для ввода строки, которая не содержит пробелов можно пользоваться оператором cin. Пробел воспринимается как разделитель между значениями различных переменных, поэтому все символы после пробела будут потеряны. Если строка содержит пробелы, необходимо пользоваться другими операторами для ввода, например функцией gets.