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

Присваивание строк

Первый и самый очевидный способ присваивания строк – присваивание отдельных символов. Например,

str1[0]=’H’;

str1[1]=’e’;

str1[2]=’l’;

str1[3]=’l’;

str1[4]=’o’;

str1[5]=’\0’;

Это совершенно неудобно, но может сработать при посимвольном вводе элементов строки. К сожалению, массиву нельзя присвоить строку-литерал и следующий код работать не будет:

char str1[10], str2[10];

str1="Hello"; str2=str1;

Не будем останавливаться на неправильном или рискованном присваивании строк. Правильное присваивание или копирование строк осуществляется библиотечными функциями, поэтому подключите заголовочный файл <string.h>

Для копирования строк существуют несколько библиотечных функций, наиболее общеупотребительной из которых является функция

char* strcpy(char* dest, const char* src)

Функция посимвольно копирует содержимое строки, на которую указывает src в строку, на которую указывает dest и возвращает dest. Так как массив может быть преобразован в указатель, такой вызов функции абсолютно легален:

char str1[10], str2[10];

strcpy(str1, "Hello");

strcpy(str2, str1);

При использовании этой функции следует соблюдать осторожность. Опасность заключается в том, что даже если исходная строка окажется больше, чем память, выделенная для второй строки (программистом через new или компилятором при использовании массивов), функция strcpy никак про это узнать не сможет и продолжит копирование в невыделенную память. Разумеется, последствия будут катастрофическими.

Снизить риск такого развития событий способна функция

char* strncpy(char* dest, const char* src, size_t count)

Последний параметр – максимальное количество копируемых символов. Таким образом, передавая туда размер приемника, вы гарантируете, что функция никогда не выйдет за пределы выделенной памяти. Однако помните, что если исходная строка будет скопирована не полностью, нуль-терминатор не появится в результирующей строке. Его придется записать самостоятельно.

Упражнение 3. Из данной строки s создайте строку-палиндром, удвоив и обратив данную строку.

ПРЕДУПРЕЖДЕНИЕ

Никогда не забывайте контролировать используемую память!

Сравнение строк

Для лексикографического сравнения строк используют функцию strcmp. Прототип этой функции:

int strcmp(const char *string1, const char *string2);

Функция возвращает число меньшее 0, если первая строка меньше второй, большее нуля, если первая строка больше второй и 0, если строки лексикографически равны.

Не надо сравнивать строки, используя операции ‘<’ и ‘>’. На самом деле так вы будете сравнивать указатели, то есть адреса строк.

Упражнение 4. Сравнение строк. Составить из двух заданных слов (под словом будем понимать любую последовательность символов, не содержащую в себе пробельных символов) предложение, в котором слова будут упорядочены1.