Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТРПП. ЛЕКЦИИ! Готовимся к экзамену))).docx
Скачиваний:
12
Добавлен:
10.12.2018
Размер:
175.63 Кб
Скачать

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

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

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

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

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

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

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

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

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

Пример

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

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

cout <<"Введите х\0";

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

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

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

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

cout << s;

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

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

cout << s;

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

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

Пример:

char s[20]="Фамилия";

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

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

Пример:

char s[]="Фамилия";

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

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

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.

Пример

Ввести текст, поделить его на слова, определить количество букв в каждом слове.

Text - вводимый текст,

р -указатель на слово из текста,

razd - строка из разделителей,

dlina - длина слова

#include<iostream.h>

#include<string.h>

#include<stdio.h>

void main()

{

char text[80],*p, *razd=" .,";

cout << "\nvvedi text ";

gets(text);

cout << "\n text "<< text;

p=strtok(text,razd); // Выделение первого слова текста

while (p) // Пока можно выделить слово, т.е. пока слово P – не пустое

{

cout << "\n" << p;

int dlina, i;

dlina=strlen(p); // Определение длины слова

cout << "\n слово "<< p << " Длина " << dlina;

p=strtok(NULL,razd); // Выделение второго, третьего, и т.д. слов

}

Функции библиотеки stdlib.h (преобразование строки в число)

atoi(s) – преобразует строку s в целое число

atoll(s) – преобразует строку в s длинное целое число

atof(s) – преобразует строку s в вещественное число