Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015

Тут можно читать онлайн Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - бесплатно полную версию книги (целиком) без сокращений. Жанр: Прочая старинная литература, издательство Вильямс, год 0101. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.

Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 краткое содержание

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - описание и краткое содержание, автор Стивен Прата, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать онлайн бесплатно полную версию (весь текст целиком)

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать книгу онлайн бесплатно, автор Стивен Прата
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Какое значение возвращает strcmp(), если строки не совпадают? В листинге 11.22 показан пример.

Листинг 11.22. Программа compback.c

452 глава 11 Сравнение символа А с самим собой возвращает 0 Сравнение А и - фото 351

452 глава 11

Сравнение символа "А" с самим собой возвращает 0. Сравнение "А" и "В" возвращает -1, а обратное сравнение возвращает 1. Из этих результатов следует, что функция strcmp() возвращает отрицательное число, если первая строка в алфавитном порядке предшествует второй, и положительное число, если порядок следования строк противоположный. Таким образом, сравнение "С" с "А" дает 1. Другие системы могут возвратить 2, т.е. разность между значениями ASCII-кодов. Стандарт ANSI требует, чтобы функция strcmp() возвращала отрицательное число, когда первая строка в алфавитном порядке предшествует второй, 0, если строки совпадают, и положительное число, если первая строка в алфавитном порядке следует за второй. Однако точные числовые значения зависят от реализации. Например, ниже приведен вывод для другой реализации, в которой возвращается разность между значениями кодов символов:

Л что если начальные символы строк идентичны В общем случае функция strcmp - фото 352

Л что, если начальные символы строк идентичны? В общем случае функция strcmp() продвигается по строкам до тех пор, пока не найдет первую пару несовпадающих символов. После этого она возвращает соответствующий код. В самом последнем примере строки "apples" и "apple" совпадают вплоть до финального символа в первой строке. Этот символ сравнивается с шестым символом строки "apple", которым является нулевой символ, имеющий ASCII-код 0. Так как нулевой символ является первым в последовательности ASCII, символ s находится после него, функция возвращает положительное значение.

Последнее сравнение показывает, что strcmp() сравнивает все символы, а не только буквы, поэтому вместо утверждения, что сравнение производится в алфавит ном порядке, можно сказать, что strcmp() следует последовательности сопоставления машины. Это означает, что символы сравниваются согласно их числовым представлениям, которыми обычно являются значения ASCII-кодов. В кодировке ASCII коды прописных букв предшествуют кодам строчных букв. Таким образом, strcmp ("Z", "а") возвращает отрицательное число.

Чаще всего о точном возвращаемом значении можно не беспокоиться. Вполне достаточно знать, нулевое оно или нет, т.е. совпадают ли строки. Если требуется сортировать строки в алфавитном порядке, то нужно знать, каким является результат сравнения — положительным, отрицательным или нулевым.

На заметку!

Функция strcmp() предназначена для сравнения строк, а не символов. Следовательно, вы можете указывать такие аргументы, как "apples" и "А", но не символьные аргументы наподобие 'а' . Тем не менее, вспомните, что тип char является целочисленным, поэтому для сравнения символов можно применять операции отношений. Предположим, что word — это строка, хранящаяся в массиве элементов char, a ch — переменная типа char. Тогда показанные ниже операторы допустимы:

if (strcmp(word, "выход") == 0) // используйте strcmp() для строк

puts("Всего хорошего!");

if (ch == 'в') II используйте == для символов

puts("Всего хорошего!");

Однако не применяйте ch или 'в' в качестве аргументов для strcmp().

Символьные строки и строковые функции 453

В листинге 11.23 функция strcmp() используется для выяснения, когда программа должна остановить чтение ввода.

Листинг 11.23. Программа quit chk.c

Программа завершает чтение входных данных когда встречает символ EOF в этом - фото 353

Программа завершает чтение входных данных, когда встречает символ EOF (в этом случае s_gets() возвращает NULL), при вводе слова quit или по достижении предела, указанного в LLM.

Кстати, чтение входных данных иногда удобнее прекращать путем ввода пустой строки, т.е. нажатием клавиши или , не набирая ничего другого. Для этого оператор цикла while можно модифицировать так:

while (ct < LIM && s_gets(input[ct], SIZE) != NULL && input[ct][0] != '\0')

Здесь input [ct] представляет собой только что введенную строку, a input [ct] [0] — первый символ этой строки. Если пользователь вводит пустую строку, то функция s_gets() помещает в первый элемент нулевой символ, так что выражение

input[ct] [0] != '\0'

выполняет проверку на предмет пустой входной строки.

454 глава 11

картинка 354Вариация stmcmpO

картинка 355

Функция strcmp() сравнивает строки до тех пор, пока не найдет пару соответствующих символов, которые отличаются друг от друга, и этот поиск может продолжаться вплоть до достижения конца одной из строк. Функция strncmp() сравнивает строки до тех пор, пока не обнаружит в них различия либо пока не сравнит количество символов в обеих строках, указанное в третьем аргументе. Например, если необходимо найти строки, начинающиеся с "астро", то поиск можно было бы ограничить первыми пятью символами. В листинге 11.24 показано, как это сделать.

Вот вывод, полученный из программы:

Найдено: астрономия Найдено: астрофизика Найдено: астролябия

Количество слов в списке, начинающихся с астро: 3

ФУНКЦИИ strcpy() И strncpy()

Ранее мы говорили, что если ptsl и pts2 — указатели на строки, то оператор

pts2 = ptsl;

копирует только адрес строки, но не саму строку. Тем не менее, предположим, что вы хотите скопировать строку. В таком случае можете воспользоваться функцией strcpy(). Код в листинге 11.25 предлагает пользователю ввести слова, начинающиеся с буквы к. Эта программа копирует ввод во временный массив, и, если первой буквой является к, программа использует функцию strcpy() для копирования этой строки из временного файла в место ее постоянного хранения. Функция strcpy() представляет собой строковый эквивалент оператора присваивания.

Ниже показаны результаты пробного запуска Введите 5 слов которые начинаются с - фото 356

Ниже показаны результаты пробного запуска:

Введите 5 слов, которые начинаются с буквы к:

квазар

квота

кристалл

квалификация

больше нет

больше нет не начинается с буквы к!

456 глава 11

конкурс

Список принятых слов:

квазар

квота

кристалл

квалификация

конкурс

Обратите внимание, что счетчик i инкрементируется, только когда вводимое слово проходит проверку на наличие первой буквы к. Кроме того, в программе применяется проверка на основе символов:

if (temp[0] != 'к')

Условие выясняет, отличается ли первый символ в массиве temp от буквы к. Другая возможность связана с использованием проверки на основе строк:

if (strncmp(temp, "к", 1) != 0)

Условие определяет, отличаются ли строки temp и "к" друг от друга в первом элементе.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Стивен Прата читать все книги автора по порядку

Стивен Прата - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Язык программирования C. Лекции и упражнения (6-е изд.) 2015 отзывы


Отзывы читателей о книге Язык программирования C. Лекции и упражнения (6-е изд.) 2015, автор: Стивен Прата. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x