Задание 3. Использование библиотечных функций string.h
Пример. Вывести слова введенной строки, начинающиеся с гласной буквы, на экран столбиком, без разделительных знаков (пробел, табуляция, точка, запятая и т.п.).
Для выделения слов из строки будем использовать библиотечную функцию
char * strtok(char *str1, const char *str2),
которая ищет в строке str1 лексемы, выделенные символами из строки str2 и возвращает указатель на выделенную лексему, причем при отсутствии лексемы возвращается NULL (нулевой указатель, то есть указатель, отличный от указателя на любой объект). Чтобы разделить некоторую строку на лексемы, при первом вызове функции strtok() параметр str1 должен указывать на начало этой строки. При последующих вызовах функции в качестве параметра str1 нужно использовать нулевой указатель.
Для проверки принадлежности первой буквы слова к гласным буквам будем использовать функцию
char * strchr (const char * str, int ch),
которая возвращает указатель на первое вхождение младшего байта параметра ch в строке str. Если совпадение не обнаружено, возвращается нулевой указатель.
# include <iostream.h>
# include <string.h>
# define dlin 80 // директива позволяет в программе вместо
//числа 80 использовать идентификатор dlin
void main()
{
cout<<”Enter string ”;
char stroka[dlin];
cin.getline(stroka,dlin);
char *slova[dlin/2]; //массив указателей для хранения
//слов строки
char *razd=".,:;!? ";// указатель на строку,
//состоящую из разделительный символов
char *glas="aeoiuy"; // указатель на строку,
//состоящую из гласных
int k=0; //определили индекс для массива slova
slova[k]=strtok(stroka,razd); // выделили первое слово
while (slova[k])// пока выделенная из строки
//лексема не равна NULL
{
if (strchr(glas,*slova[k])!=NULL)
cout<<slova[k]<<"\n";//проверили, является ли первая
// буква слова s1[k] гласной
slova[++k]=strtok(NULL,razd); // выделили очередное
//слово.
}
}
В данном решении задачи для хранения слов мы использовали массив, взяв за его размерность максимально возможную – размерность исходной строки, деленную пополам, то есть предполагая, что все слова строки состоят из одной буквы и разделены одним разделителем. Однако, в данной задачи не предполагается дальнейшая обработка выделенных из строки слов, поэтому нет необходимости сохранять их в массиве. Поэтому целесообразнее определять массив указателей char * s1[dlin/2], а определить лишь один указатель char *s1, который и использовать для обработки очередного выделенного слова.
1. Дана текстовая строка. Вывести на печать все ее слова в таком порядке: все однобуквенные, потом все двухбуквенные, потом все трехбуквенные и т.д. до слова максимальной длины, используя функции strtok, strlen.
2. Даны текстовая строка и слово (например, ba). Напечатать все слова, входящие в эту текстовую строку, начинающиеся с букв заданного слова (например, bak, barber, baab, baalam), используя функции strtok, strlen, strnicmp.
3. Дана текстовая строка. Сформировать строку, состоящую из последних букв слов заданной текстовой строки, используя функции strtok, strlen и вывести ее на экран. Например, если задана строка adcd ef ghi jklmn, то на экран должно быть выведено слово dfin.
4. Даны текстовая строка и слово (например, ab). Напечатать все слова, входящие в эту текстовую строку, заканчивающиеся на буквы заданного слова (например, abcdab, ab, kab), используя функции strtok, strlen, strcmp.
5. Даны текстовая строка и слово. Определить, какие слова из этой текстовой строки предшествуют заданному слову в лексикографическом порядке, используя функции strtok, strcmp.
6. Дан набор слов и произвольная текстовая строка. Выбрать из текстовой строки все слова, входящие в данный набор и вывести их на печать, используя функции strtok, strcmp.
7. Дана текстовая строка. Определить, упорядочены ли ее слова по алфавиту, указать первое слово, нарушающее порядок, используя функции strtok, strcmp.
8. Из заданной текстовой строки распечатать только те слова, которые начинаются и оканчиваются одной и тоже буквой, используя функции strtok, strlen.
9. Из заданной строки, распечатать все слова без повторений, используя функции strtok, strcmp.
10. Дана текстовая строка. Сформировать строку, состоящую из третьих букв каждого слова заданной текстовой строки, используя функции strtok, strlen, и вывести ее на экран. Например, если задана строка adcd ef ghi jklmno, то на экран должно быть выведено слово сil.
11. Дана текстовая строка. Распечатать строку, состоящую из слов заданной, расположенных в лексикографическом порядке, используя функции strtok, strlen, strnicmp.
12. Дана текстовая строка. Распечатать из нее все слова, имеющие наименьшую и наибольшую длину, используя функции strtok, strlen.
Дата добавления: 2015-10-09; просмотров: 1099;