Работа со строками и символами
Скачать 42.31 Kb.
|
Лабораторная работа №11 Тема: Работа со строками и символами Цель работы: научиться использовать в программах функции для работы со строками в языке C++. Теоретические сведения. Для работы со строками используются библиотечные функции, прототипы которых находятся в заголовочных файлах stdlib.h и string.h. В программах, в зависимости от типа, вызовы функций для работы со строками задаются в виде: ИмяФ(СписокАргументов); или ИмяПерем=ИмяФ(СписокАргументов); где ИмяФ – имя функции; СписокАргументов – список аргументов, передаваемых в тело функции; ИмяПерем – идентификатор соответствующего типа. Например: y=strlen(st); /*переменной y присвоить значение длины строки st*/ При использовании библиотечных функций следует учитывать некоторые особенности их выполнения и представления символьных данных в памяти. Функции, работающие с регистрами, распространяются только на латиницу. В С++ некоторые параметры функций обработки символов принадлежат типу int (unsigned), поэтому, если число станет больше 128 (255), функция будет работать некорректно. Перед первым обращением к строке она должна быть объявлена и проинициализирована. Во многих случаях в качестве начального значения строки необходимо бывает задать пустую строку. Такую инициализацию можно выполнить с помощью вызова функции strcpy(s, "");, но более эффективным будет присваивание *s=0;. Кроме того пустую строку можно инициализировать char s[10]=""; или char s[10]="\0";, но при этом размер строки должен быть задан. Функции копирования (кроме strncpy ) не проверяют длину строки. Размер строки-приемника должен быть больше, чем размер источника на 1 символ (для символа '\0' ). При вызове функции strncpy следует помнить, что, если длина копируемой строки превосходит параметр kol, то строка-получатель не будет завершена символом '\0'. В этом случае такой символ надо дописывать в конец строки вручную.
Сравнение строк с помощью функции strcmp осуществляется побайтово в лексикографическом порядке, то есть в порядке следования соответствующих байтов строк в таблице кодировки. Именно поэтому значения элементов в строках зависят от регистра. При использовании библиотечных функций следует иметь в виду, что указатель на строку и имя массива символов указывают на адрес размещения строки в памяти. Это означает, что изменения значений элементов строки сохраняются после завершения работы функции. Чтобы не допустить изменений в строке используется указатель на константу, который не позволит модифицировать данные, хранящиеся по адресуемой области памяти. При обработке строк типа string можно использовать следующие функции: s.substr(pos, length) — возвращает подстроку из строки s, начиная с номера pos длинной length символов; s.empty() — возвращает значение true, если строка s пуста, false — в противном случае; s.insert(pos, s1) — вставляет строку s1 в строку s, начиная с позиции pos; s.remove(pos, length) — удаляет из строки s подстроку length длинной pos символов; s.find(s1, pos) — возвращает номер первого вхождения строки s1 в строку s, поиск начинается с номера pos, параметр pos может отсутствовать , в этом случае поиск идет с начала строки; s.findfirst(s1, pos) — возвращает номер первого вхождения любого символа из строки s1 в строку s, поиск начинается с номера pos, который может отсутствовать. Задания к лабораторной работе. Выполните приведенные ниже задания. Удалить все гласные буквы из строки. Подсчитать количество слов в строке. Перевернуть каждое четное слово в строке. Удалить каждое четное слово из строки. Отсортировать слова в строке в лексикографическом порядке (по алфавиту). Удалить из строки все слова, начинающиеся на гласную букву. Удалить из строки все слова, заканчивающиеся на гласную букву. В исходном предложении перед каждым словом поставить знак ?. В заданном предложении найти самое короткое и самое длинное слово. В исходном предложении удалить все символы пробела. Вывести преобразованный текст и количество удаленных пробелов. Контрольные вопросы Что будет являться результатом работы функции побайтового копирования строк, если длина строки-источника превосходит допустимый размер строки-приемника? Что будет являться результатом работы функции побайтового копирования строк, если длина строки-источника меньше размера строки-приемника? Почему при сравнении строк важен регистр символов? Как сравниваются строки разной длины? Какие возможны последствия при обращении к неинициализированной строке? |