string (956670), страница 2

Файл №956670 string (Все лабы по инфе за 2ой сем на С++) 2 страницаstring (956670) страница 22013-10-10СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

static char* operator[] = { "break",

"case",

"continue",

"default",

"do",

"else",

"for",

"if",

"return",

"switch",

"while",

NULL };

Для организации поиска заданного слова в принятой конфигурации данных может быть реализован следующий исходный код, который оформлен в виде прикладной функции findword.

/* Словарный поиск */

int findword(char* dic[], char* word) {

int i = 0; /* словарный индекс */

int rez = (-1); /* флаг результата сравнения */

/* Цикл поиска слова */

while(dic[i] != NULL) {

/* Проверка очередного слова словаря */

if((rez = strcmp(dic[i], word)) < 0)

i++;

else

break;

} /* while */

/* Возврат результата поиска */

return((rez == 0) ? i : (-1));

} /* findword */

При вызове в функцию findword необходимо передать адреса словарного массива и искомого слова, которые обозначают указатели dic[] и word, соответственно. Для поиска заданного слова функция fidword реализует последовательность сравнений содержащей его строки со строками слов словаря, используя функцию strcmp. Поиск продолжается, пока строка, содержащая текущее слово, лексиграфически меньше, чем строка искомого слова и не достигнут нулевой указатель NULL в конце словаря. При успехе поиска функция findword возвращает словарный индекс найденного слова, а при неудаче - отрицательный код (-1).

Не менее важной поисковой задачей является поиск требуемой информации в строке символов. Различные варианты организации операции поиска данных в символьной строке реализуют стандартные функции strchr, strrchr, strstr и strpbrk. Они позволяют обнаружить и установить расположение в строке определенного символа, символов заданного набора или фрагмента текста. Спецификация форматов их вызова имеет вид:

char* strchr (const char* str, int code);

char* strrchr(const char* str, int code);

char* strpbrk(const char* str, const char* key);

char* strstr (const char* str, const char* key);

Первый аргумент этих функций, обозначенный указателем str, передает адрес исходной строки символов, где требуется найти символьный объект, специфицированный вторым аргументом: code или key. Все функции должны возвращать адрес искомого объекта исходной строки, если он обнаружен, или нулевой указатель NULL, в противном случае.

Функции strchr и strrchr предназначены для поиска в исходной строке, соответственно, первого и последнего экземпляра символа, целочисленный код которого задает аргумент code. Все символы, которые сопоставляются при поиcке, интерпретируются как данные типа char, поэтому актуально только значение младшего байта параметра code. Завершающий символ с нулевым кодом '\0' считается частью исходной строки, то есть может быть обнаружен при поиске.

Функции strpbrk и strstr используют при поиске данные ключевой строки, адрес которой передается через указатель key. В частности, функция strpbrk ищет первый символ исходной строки, который совпадает с одним из символов ключевой строки. Завершающие символы с нулевым кодом '\0' в расчет не берутся. Функция strstr обеспечивает поиск первого вхождения в исходную строку последовательности символов ключевой строки без учета завершающего символа с нулевым кодом '\0'.

В прикладных программах рассмотренные функции могут быть использованы для контекстного поиска или замены заданных информационных объектов в строке символов. Их применение демонстрирует следующий исходный код упрощенной функциональной реализации прикладной команды basename из OS UNIX, которая выделяет базовое имя из заданного маршрутного имени файла.

/* Базовое имя файла */

char* basename(char* path, char* ext) {

char* b; /* указатель базового имени файла */

char* e; /* указатель расширения имени файла */

/* Найти адрес базового имени */

if((b = strrchr(path, '/')) != NULL)

b++;

else b = path;

/* Отделить расширение */

if((e = strstr(b, ext)) != NULL)

*e ='\0';

return(b); /* Вернуть адрес базового имени */

} /* basename */

При вызове в функцию basename следует передать адреса символьных строк, содержащих маршрутное имя и расширение имени файла, которые обозначают указатели path и ext, соответственно. В OS UNIX маршрутное имя файла образует префикс из цепочки названий подкаталогов, разделенных символом '/', которую завершает базовое имя файла с последующим произвольным и необязательным суффиксом расширения. Расширение имени файла начинается с символа '.', как принято для любых операционных системах, в том числе, для OS UNIX. Таким образом, расположение базового имени ограничивает с одной стороны адрес первого символа после последнего префиксного кода '/' и адрес суффикса расширения с другой стороны. Эти адреса в функции basename предоставляют вызовы функций strrchr и strstr. Первый символ расширения '.' заменяет нулевой код '\0', чтобы отделить расширение от базового имени файла. Префикс подкаталогов исключает возврат адреса базового имени файла. Например, следующий вызов функции basename:

char* base = basename("/usr/include/string.h", ".h");

возвращает указателю base адрес символьной строки "string", выделяя из маршрутного имени файла /usr/include/string.h базовое имя string.

Наиболее интеллектуальной операцией обработки символьных строк является операция лексического разбора. Она обеспечивает разбиение содержимого исходной символьной строки на отдельные текстовые единицы, лексемы. При этом предполагается, что в исходной строке лексемы разделены символами из заданного набора. Выделение лексем в исходной строке символов при заданных разделителях реализует функция strtok. Спецификация формата ее вызова имеет вид:

char* strtok(char* str, const char* delimit);

Функция strtok рассматривает исходную строку символов, адресуемую через указатель str, как набор лексем, которые разделены в ней промежутками из одного или нескольких символов строки ограничителей, адресованной указателем delimit. В приведенной транскрипции функция strtok выполняет поиск первой лексемы исходной строки символов. Поиск остальных лексем гарантирует последовательность вызовов функции strtok, в которых адрес исходной строки заменяет нулевой указатель NULL, а строки ограничителей необязательно идентичны. Каждое из последовательных обращений к функции strtok определяет адрес очередной лексемы исходной строки и запоминает его, чтобы обеспечить продолжение лексического разбора. Первый символ промежутка после обнаруженной лексемы в исходной строке автоматически заменяет нулевой код '\0'. Это позволяет получать лексемы в формате символьных строк, но приводит к изменению содержимого исходной строки лексического разбора. Поэтому при необходимости следует сохранить копию исходной строки перед вызовом функции strtok. Результаты лексического разбора образует конечная последовательность адресов лексем исходной символьной строки, которые возвращают очередные вызовы функции strtok. Признаком завершения лексического разбора является возврат из функции strtok нулевого указателя NULL, когда очередная лексема не может быть обнаружена.

Следующий фрагмент C-кода иллюстрирует применение функции strtok для лексического разбора строки символической записи обыкновенной дроби с целью выделить последовательности цифр числителя и знаменателя дроби, которые разделяет обязательный символ '/' и необязательные пробелы.

char* nominator; /* адрес числителя дроби */

char* denominator; /* адрес знаменателя дроби */

char fraction[] = " 1 / 1000"; /* строка дроби 1/1000 */

nominator = strtok(fraction, "/ "); /* выделение числителя */

denominator = strtok(NULL, " /"); /* выделение знаменателя */

В этом примере два последовательных вызова функции strtok для исходной строки fraction, содержащей дробь " 1 / 1000", выделяют две лексемы: числителя "1" и знаменателя "1000", адреса которых сохраняют указатели nominator и denominator, соответственно. Они могут быть использованы, например, для последующих целочисленных преобразований и обработки.

В заключение следует отметить, что во многих популярных версиях системы программирования C набор стандартных функций обработки символьных строк расширяют дополнительные процедуры, уникальные только для данной конкретной реализации. В частности, в системе программирования Borland C дополнительно к стандартным введены, например, функции strlwr и strupr, которые обеспечивают преобразование содержимого заданной строки к символам нижнего и верхнего регистра, соответственно. Однако, при разработке мобильного программного обеспечения целесообразно применять только стандартные функции обработки символьных строк, чтобы исключить зависимость исходного кода программы от особенностей конкретных реализаций системы программирования C.

Характеристики

Тип файла
Документ
Размер
79,5 Kb
Тип материала
Высшее учебное заведение

Список файлов лабораторной работы

Все лабы по инфе за 2ой сем на С++
Инфа - бесценно
homework
H07.c
H08.c
H09.c
H10.c
H12.c
H15.c
H18.c
H20.c
H22.c
H23.c
H24.c
H25.c
kr_c
file
f_10.c
f_18.c
f_19.c
f_21.c
f_22.c
f_23.c
f_24.c
kostik
f_01.c
f_02.c
Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7029
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее