Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб6.Строки.doc
Скачиваний:
6
Добавлен:
23.08.2019
Размер:
256.51 Кб
Скачать

Операции со строками Создание строк

Проиллюстрируем создание строк на фрагментах кода с комментариями.

char str1[10]; // Строка - массив из 10 символов. Начальное значение символов не определено.

char str2[10]="Hello";

/* Используется инициализация (не присваивание!). В первые 5 символов записывается “Hello”, в 6 – нуль-терминатор, значение трех последних не определено.*/

char str3[10]={'H', 'e', 'l', 'l', 'o', '\0'}; //Эквивалентно предыдущему.

char str4[10]="Very long line";

//Ошибка. Массив из 10 элементов нельзя инициировать более длинной последовательностью.

char str5[]="Very long line";

/*Компилятор автоматически определяет длину массива (в нашем случае 15) и инициализирует его последовательностью символов. */

char* str6;

/*Строка - указатель на символ. В большинстве случаев для ее использования потребуется выделить память. Например, так char *s; s = new char[10];*/

Длина строки

Для вычисления длины строки используется функция (заголовочный файл <string.h>):

size_t strlen(const char *string);

Функция возвращает длину строки, не включая нуль-терминатор. Как всегда, следите за тем, чтобы в выделенной памяти все же нашелся такой символ. В противном случае функция выйдет за пределы выделенной памяти и все будет плохо. Напомню, что для определения длины строки функции придется последовательно обратиться ко всем ее символам до нуль-терминатора, а значит, потенциально эта операция довольно дорогая. Поэтому, не следует использовать эту функцию в циклах, то есть, вместо

for (i=0;i<strlen(str);i++) {

// работа со строкой, не изменяющая ее длину

}

больше подойдет примерно такой код :

char len;

len=strlen(str);

for (i=0;i<len;i++) {

// работа со строкой, не изменяющая ее длину

}

Упражнение 1. Инициализируйте несколько строк разными способами, определите и напечатайте их размер, используя функцию sizeof() и strlen(). Объясните, чем определяется разница между полученными значениями.

Упражнение 2. Проверьте, является ли данная строка палиндромом.

Конкатенация (сцепление) строк

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

char str1[10]="Hello";

char str2[10]="World!";

char* str3;

str3=str1+str2;

Если ответ – ошибка в 4-й строке, вы усвоили материал (или знали это раньше). Если же вы полагаете, что в str3 будет храниться строка "Hello world!", то вероятно, предыдущих объяснений оказалось недостаточно.

Для конкатенации следует использовать функции.

Есть две специальные функции:

char* strcat(char* dest, const char* source)

char* strncat(char* dest, const char* source, size_t size)

Эти функции добавляют к строке, на которую указывает dest, символы из строки source. Первая версия добавляет все символы до нуль-терминатора, вторая – максимум size символов. Результирующая строка завершается нуль-терминатором.