- •Программирование на языке высокого уровня си
- •Часть II
- •Содержание
- •Работа 1. Пользовательские функции в си
- •I. Теоретический раздел работы
- •1. Функции
- •1.1. Аргументы функций
- •1.2.Функции, возвращающие значения.
- •1.3. Функция main ()
- •2. Рекурсия.
- •II. Экспериментальный раздел работы
- •III. Задания для самостоятельной работы
- •Работа 2. Структурированный тип данных массив
- •I. Теоретический раздел работы
- •1.1. Структурированный тип данных массив
- •1.2. Передача массива в качестве параметра
- •1.3. Многомерные массивы
- •II. Экспериментальный раздел
- •III. Задания для самостоятельной работы.
- •Работа 3. Символьный и строковый типы данных
- •1.1. Символьный тип данных
- •Работа 4. Структуры
- •I. Теоретический раздел работы
- •1.1. Структура
- •1.2. Объединение
- •1.3. Переименование типов
- •II. Экспериментальный раздел работы
- •III. Задания для самостоятельной работы
- •Работа 5. Работа с файлами
- •I. Теоретический раздел работы
- •1.1.Введение
- •1.1. Потоковый ввод-вывод
- •1.2. Открытие и закрытие потока
- •1.3. Стандартные файлы и функции для работы с ними.
- •1.4. Форматированный ввод-вывод
- •1.5. Прямой доступ к файлам
- •II. Экспериментальный раздел работы.
- •III. Задания для самостоятельной работы
- •Список литературы
- •Учебное издание
- •Часть II
Работа 3. Символьный и строковый типы данных
Цель работы:
– изучить приемы работы с символьными и строковыми типами данных;
– изучить подпрограммы для работы с символьными и строковыми данными;
– освоить приёмы работы с перечисляемым типом данных.
Теоретический раздел
1.1. Символьный тип данных
Любой текст состоит из символов. Для хранения одного символа предназначен тип данных char. Переменную типа char можно рассматривать двояко: как целое число, занимающее 1 байт и способное принимать значения от 0 до 255 (тип unsigned char) или от -128 до 127 (тип signed char) и как один текстовый символ. Сам же тип char может оказаться как знаковым, так и беззнаковым, в зависимости от операционной системы и компилятора. Поэтому использовать тип char не рекомендуется, лучше явно указывать будет ли он знаковым (signed) или беззнаковым (unsigned).
Как и целые числа, данные типа char можно складывать, вычитать, умножать, делить, а можно выводить на экран в виде одного символа. Именно это и происходит при выводе символа через объект cout. Если же нужно вывести числовое значение символа (также называемый ASCII-кодом), то значение символа необходимо преобразовать к типу int. Например:
#include<iostream>
using namespace std;
int main()
{
unsigned char c='A'; // Константы char заключаются в одинарные кавычки
cout<<c<<" "<<(int)c<<endl;
c=126; // char можно присвоить и числовое значение
cout<<c<<" "<<(int)c<<endl;
return 0;
}
В этом примере переменной с типа char присваивается значение, равное символу 'A' (константы типа char записываются как символы в одинарных кавычках), затем на экран выводится значение c, как символа и его ASCII-код, потом переменной c присваивается значение 126 (то есть символ с ASCII-кодом 126) и снова выводится на экран символ и его ASCII-код.
Организовать последовательное посимвольное считывание всего входного потока можно при помощи цикла while:
#include<iostream>
using namespace std;
int main()
{
unsigned char c;
while(cin>>c) // Цикл пока считывание успешно
{ // Делаем необходимые действия
}
return 0;
}
В этом примере программа будет посимвольно считывать входной поток (по умолчанию — ввод с клавиатуры), пока не встретит признак конца файла. Для того, чтобы сообщить программе о завершении файла при вводе с клавиатуры необходимо нажать клавиши Ctrl-d в системе Linux и Ctrl-z в системе Windows.
Эта программа при считывании данных будет игнорировать символы–разделители: пробелы, символы новой строки и табуляции. Если нужно, чтобы в переменную c считывались все символы, в том числе и разделители, то необходимо для потока ввода cin установить манипулятор noskipws при помощи инструкции cin>>noskipws;.
Строковый тип данных
Строка представляет собой массив значений типа char, завершающийся нулевым байтом. Каждый символ в строке — это на самом деле целое битовое значение кода ASCII, соответствующее отображаемому символу или операции, например возврату каретки или переводу строки.
Однако массивы типа char - символьные массивы - занимают в языке особое место. Во многих языках есть специальный тип данных - строка символов (string). В языке С отдельного типа строки символов нет, а реализована работа со строками путем использования одномерных массивов типа char.
В языке С символьная строка - это одномерный массив типа char, заканчивающийся нулевым байтом. Нулевой байт - это байт, каждый бит которого равен нулю. Для нулевого байта определена специальная символьная константа '\0'. Это следует учитывать при описании соответствующего массива символов. Так, если строка должна содержать N символов, то в описании массива следует указать N+1 элемент.
Например, описание char str[11] предполагает, что строка содержит 10 символов, а последний байт зарезервирован под нулевой байт. Конечно, был задан обычный одномерный массив, но если трактовать его как строку символов, то это будет строка максимум из 10 элементов.
Хотя в языке С нет специального типа строки, язык допускает строковые константы. Строковая константа - это список литер, заключенных в двойные кавычки. Например,
"Borland СИ", "Это строковая константа".
Есть два простых способа ввести строку с клавиатуры. Первый способ -воспользоваться функцией scanfO со спецификатором ввода %s. Надо помнить, что функция scanf() вводит символы до первого пробельного символа. Второй способ - воспользоваться специальной библиотечной функцией gets(), объявленной в файле stdio.h. Функция gets() позволяет вводить строки, содержащие пробелы. Ввод оканчивается нажатием клавиши Enter. Обе функции автоматически ставят в конец строки нулевой байт. Не забудьте зарезервировать для него место. В качестве параметра в этих функциях используется просто имя массива.
Вывод строк производится функциями printfO или puts(). Обе функции выводят содержание массива до первого нулевого байта. Функция puts() добавляет в конце выводимой строки символ новой строки. В функции printf() переход на новую строку надо предусматривать в строке формата самим.
Для работы со строками в С имеется богатая библиотека строковых функций (все они начинаются с букв str) string.h. Рассмотрим основные из них.
Функция strlen(s) возвращает длину строки, выраженную в символах.
Функции копирования:
char *strcpy (char* s1, const char* s2) строку s2 копирует в s1;
char *strncpy (char* s1,const char* s2, size_t count) копирует не более count символов из строки s2 в s1;
char *strdup (const char *s) выделяет память для хранения копии строки, на которую указывает s, копирует эту строку в выделенную область и возвращает указатель на неё.
Функции соединения строк:
char *strcat (char* s1, const char* s2) строку s2 присоединяет к строке s1;
char *strncat (char* s1, const char* s2, size_t count) не более count символов из строки s2 присоединяет к строке s1.
Функции поиска:
char * strchr ( const char* s, char c) находит первое вхождение символа с в строку s. Возвращает указатель на найденный символ или NULL, если символ не обнаружен;
char * strrchr ( const char* s, char c) находит последнее вхождение символа с в строку s. Возвращает указатель на найденный символ или NULL, если символ не обнаружен;
char * strstr ( const char* s, const char* substr) ищет в s первое вхождение подстроки substr. Возвращает указатель на первый символ найденной подстроки или NULL, если такая подстрока не найдена;
char *strpbrk ( const char *s1, const char *s2) — возвращает указатель на первый символ в строке s1, совпадающий с каким-нибудь из символов строки s2. При этом нулевые символы в конце строки в рассмотрение не включаются;
char * strtok ( const char* s1, const char* s2) возвращает указатель на следующую лексему (часть строки) в строке s1. Символы строки s2 используются как ограничители, определяющие лексему. Как и в других функциях поиска, если лексема не найдена, возвращается NULL.
Функции преобразования строк:
char * strupr ( char* s) английские буквы нижнего регистра (“маленькие”) строки, на которую указывает s, преобразует в соответствующие буквы верхнего регистра (в “большие”). Остальные символы не меняются;
char * strlwr ( char* s) английские буквы верхнего регистра (прописные) строки, на которую указывает s, преобразует в соответствующие буквы ниж-него регистра (в “маленькие”). Остальные символы не меняются.
Перечисляемый тип данных
Перечислимый тип (enumeration) - это множество поименованных целых констант. Перечислимый тип определяет все допустимые значения, которые могут иметь переменные этого типа. Основная форма объявления типа следующая:
enum имя_типа (список_названий) список переменных:
Список переменных может быть пустым. Пример определения перечислимого типа и переменной данного типа:
enum seasons { win, spr, sum, aut };
enum seasons s;
Ключом к пониманию сущности перечислимого типа является то, что каждое из имен win, spr, sum и aut представляет собой целую величину. Если эти величины не определены по-другому, то по умолчанию они соответственно равны нулю, единице, двум и трем. Оператор
printf ("%d %d", win, aut);
выдаст на экран числа 0 и 3. Во время объявления типа можно одному или нескольким символам присвоить другие значения, например:
enum value {one=l, two, three, ten=10, thousand=1000, next};
Если теперь напечатать значения
prinlf ("%d %d %d %d %d\n", one, two, ten, thouthend, next);
то на экране появятся числа 1 2 10 1000 1001, т. е. каждый следующий символ увеличивается на единицу по сравнению с предыдущим, если нет другого присваивания.
С переменными перечислимого типа можно производить следующие операции:
присвоить переменную типа enum другой переменной того же типа;
провести сравнение с целью выяснения равенства или неравенства;
арифметические операции с константами типа enum (i = win - aut).
Нельзя использовать арифметические операции и операции ++ и -- к переменных типа enum.
Основная причина использования перечислимого тина - это улучшение читаемости программ.
Экспериментальный раздел.
Пример 1. Вывод алфавита на экран.
#include <iostream.h>
void main(void)
{
char alphabet [34]; // 33 буквы плюс NULL char letter;
int index;
for (letter = 'A', index = 0; letter <= 'Я'; letter++, index++) alphabet[index] = letter;
alphabet[index] = NULL;
cout << "Буквы " << alphabet;
}
Пример 2. Переворот строки.
void swap(char c[])
{ int i,j;
for (i=0; c[i] !='\0'; i++);
for (j=0,i--; i>j; i--,j++)
{ char s; s=c[i]; c[i]=c[j]; c[j]=s; }
}
Пример 3. Преобразование целого char[] в int
int StringToInt(char c[ ]){
int n,i;
for (i=0; !(c[i]>='0' && c[i]<='9'); i++)
if (c[i]=='\0') return 0;
for (n=0; c[i]>='0' && c[i]<='9'; i++)
n = n * 10 + c[i] - '0';
return n;
}
Поэкспериментируйте с предложенным примером и составьте функцию IntToString, реализующую преобразование целого int в char[].
Пример 4. Поиск самой внутренней скобки.
int find(char c[]){
int i, k, max, b;
for (i=0, max=0, b=-1; c[i]!=0; i++){
if (c[i]== '}' ) k--;
if (c[i]== '{' ) {
k++;
if (k>max) { max=k; b=i; }}
}
if (k!=0) return 0;
return b; }
Задания для самостоятельной работы.
А.
1. Составить программу:
которая запрашивает имя человека и повторяет его на экране;
которая запрашивает имя человека и повторяет его на экране с приветствием;
которая запрашивает название футбольной команды и повторяет его на экране со словами: "Это чемпион!".
2. Дано название футбольного клуба. Определить количество символов в нем.
3. Дано название города. Определить, четно или нет количество символов в нем.
4. Даны две фамилии. Определить, какая из них длиннее.
5. Дано слово.
Вывести на экран его третий символ.
Вывести на экран его последний символ.
Вывести на экран его k-й символ.
Определить, одинаковы ли второй и четвертый символы в нем.
Верно ли, что оно начинается и оканчивается на одну и ту же букву?
Получить и вывести на экран буквосочетание, состоящее из его второго и четвертого символов.
Получить и вывести на экран буквосочетание, состоящее из его третьего и последнего символов.
Получить его часть, образованную второй, третьей и четвертой буквами.
Получить его часть, образованную идущими подряд буквами, начиная с т-й и кончая n-й.
6. Даны два слова. Верно ли, что первое слово начинается на ту же букву, которой оканчивается второе слово?
7. Составить программу, которая запрашивает отдельно имя и отдельно фамилию, а затем выводит их как одну символьную строку.
8. Из слова "яблоко" путем вырезок его букв получить слова "блок" и "око”.
9. Из слова "информатика" путем вырезок его букв получить слова "форма" и "тик".
10. Из слова "вертикаль" путем вырезок и склеек его букв получить слова "тир" и "ветка".
11. Из слова "программа" путем вырезок и склеек его букв получить слова "ром" и "рампа".
12. Из слова "трос" путем вырезок и склеек его букв получить слова "сорт", "рост" и "торс".
13. Из слова "клоун" путем вырезок и склеек его букв получить слова "уклон", "кулон" и "колун".
14. Из слова "апельсин" путем вырезок и склеек его букв получить слово "спаниель".
15. Из слова "вирус" путем замены его букв получить слово "фокус".
16. Из слова "курсор" путем замены его букв получить слово "танцор".
17. Из слова "пробел" путем замены его букв получить слово "продел".
18. Из слова "строка" путем замены его букв получить слово "строфа".
19. Из слова "муха" путем замены его букв получить слово "слон".
20. Из слова "тетрадь" путем замены его букв получить слово "дневник".
21. Дано название футбольного клуба. Напечатать его на экран столбиком.
22. Получить строку, состоящую из пяти звездочек, т.е. символов "*".
23. Получить строку, состоящую из восьми символов "_".
24. Составить программу, формирующую строку, состоящую из любого заданного количества любых одинаковых символов.
25. Дано слово. Добавить к нему в начале 4 символа "+" и в конце 5 символов "—".
26. Дано предложение. Напечатать все его буквы "и".
27. Дано предложение. Составить программу, которая печатает столбиком все вхождения в предложение некоторого символа.
28. Дано слово из четного числа букв. Поменять местами его половины. Задачу решить двумя способами: без использования оператора цикла; с использованием оператора цикла.
29. Составить программу, которая печатает заданное слово, начиная с последней буквы.
30. Дано предложение. Вывести столбиков все его символы.
В.
1. Дано слово из 12 букв. Поменять местами его трети следующим образом:
первую треть слова разместить на месте третьей, вторую треть — на месте первой, третью треть — на месте второй;
первую треть слова разместить на месте второй, вторую треть — на месте третьей, третью треть — на месте первой.
2. Дано слово. Переставить первые три и последние три буквы, сохранив порядок их следования. Задачу решить двумя способами: без использования оператора цикла; с использованием оператора цикла.
3. Дано слово. Перенести первые k его букв в конец.
4. Дано слово s1. Получить слово s2, образованное нечетными буквами слова s1.
5. Дано слово s. Получить слово t, получаемое путем прочтения слова s, начиная с его конца.
6. Дано слово. Добавить к нему в начале и в конце столько звездочек, сколько букв в этом слове.
7. Дано предложение.
Вывести столбиком его третий, шестой и т.д. символы.
Вывести все буквы "м" и "н" в нем.
Составить программу, которая выводит все вхождения в предложение двух заданных символов.
Вывести все имеющиеся в нем буквосочетания "нн".
Вывести столбиком все его буквы "и", стоящие на четных местах.
Вывести столбиком его первый, второй, пятый, шестой, девятый, десятый и т.д. символы.
Определить число букв "о" в нем.
Определить число пробелов в нем.
Определить число вхождений в него некоторого символа.
Определить долю (в %) букв "а" в нем.
8. Дано предложение. Определить:
число вхождений в него буквосочетания "ро";
число вхождений в него некоторого буквосочетания из двух букв;
число вхождений в него некоторого буквосочетания.
9. Дан текст. Подсчитать общее число вхождений в него символов "+" и "—".
10. Дана фраза. Определить, сколько в ней предложений.
11. Дано предложение.
Определить, сколько в нем гласных букв.
Все буквы "е" в нем заменить на букву "и".
Все пробелы в нем заменить на символ "_".
Все его символы, стоящие на четных местах, заменить на букву "ы".
Все его символы, стоящие на третьем, шестом, девятом и т.д. местах, заменить на букву "А".
Заменить в нем все вхождения буквосочетания "ах" на "ух".
Заменить в нем все вхождения буквосочетания "да" на "не".
Заменить в нем все вхождения буквосочетания "про" на "нет”.
Заменить в нем все вхождения буквосочетания "бит" на "рог".
Заменить в нем все вхождения подстроки Strl на подстроку Str2.
12. Дан символ. Выяснить, является ли он цифрой.
13. Дан текст. Напечатать все имеющиеся в нем цифры. Определить количество цифр в нем.
14. Дан текст. Определить, является ли он правильной десятичной записью целого числа.
15. Дано предложение. Определить, каких букв в нем больше: "м" или "н".
16. Дано предложение. В нем слова разделены одним пробелом (символ " — " в предложении отсутствует). Верно ли, что число слов в предложении больше трех.
17. Дано предложение, в котором имеются буквы "с" и "т". Определить, какая из них встречается позже (при просмотре слова слева направо). Если таких букв несколько, то должны учитываться последние из них. Оператор цикла с условием не использовать.
18. Дан текст. Верно ли, что в нем есть пять идущих подряд одинаковых символов?
19. Дано предложение. Напечатать все его символы, предшествующие первой запятой. Рассмотреть два случая: известно, что в предложении запятые имеются; в предложении запятых может не быть.
20. Дано предложение, в котором имеется несколько букв "е". Найти:
порядковый номер первой из них;
порядковый номер последней из них.
21. Дано предложение. Определить, есть ли в нем буква "а". В случае положительного ответа найти также порядковый номер первой из них.
22. Дано слово. Проверить, является ли оно перевертышем (перевертышем называется слово, читаемое одинаково как с начала, так и с конца).
23. Дан текст. Определить количество букв "и" в первом предложении. Рассмотреть два случая:
известно, что буквы "и" в этом предложении есть;
букв "и" в тексте может не быть.
24. Дано предложение, в котором нет символа "—". Определить количество букв "о" в первом слове. Учесть, что в начале предложения могут быть пробелы.
25. Дано предложение. Определить количество букв "н", предшествующих первой запятой предложения. Рассмотреть два случая:
известно, что запятые в предложении есть;
запятых в предложении может не быть.
26. Дана последовательность слов. Проверить, правильно ли в ней записаны сочетания "жи" и "ши". Проверить, правильно ли в ней записаны сочетания "ча" и "ща". Исправить ошибки.
27. Дано предложение. Напечатать все символы, расположенные между первой и второй запятой. Если второй запятой нет, то должны быть напечатаны все символы, расположенные после единственной имеющейся запятой.
28. Дано предложение, в котором имеются одна буква "с" и одна буква "т". Определить, какая из них встречается раньше (при просмотре слова слева направо).
29. Символьной строке по ошибке вместо "опечатка" присвоено значение "очепатка". Изменить значение s так, чтобы ошибки не было.
30. Дано слово. Поменять местами его m-ю и п-ю буквы. Поменять местами первую из букв "а" и последнюю из букв "о". Учесть возможность того, что таких букв в слове может не быть.
31. Дано слово из четного числа букв. Поменять местами первую букву со второй, третью — с четвертой и т.д. Поменять местами его половины следующим способом: первую букву поменять с последней, вторую — с предпоследней и т.д.
32. Дано слово из 12 букв. Переставить в обратном порядке буквы, расположенные между второй и десятой буквами (т.е. с третьей по девятую).
33. Дано слово из 15 букв. Переставить в обратном порядке буквы, расположенные между k-й и s-й буквами (т.е. с (k + 1)-й по (s -1)-ю). Значения k и s вводятся с клавиатуры, k < s.
34. Устранить имеющуюся в заданном слове ошибку:
а) дано слово "глинянный";
б) дано слово "граффика".
35. Дано слово:
Удалить из него третью букву;
Удалить из него k-ю букву.
Удалить из него первую из букв “о”, если такая буква есть;
Удалить из него последнюю из букв "т", если такая буква есть.
Если его длина нечетная, то удалить среднюю букву, в противном случае — две средних буквы.
Удалить из него все повторяющиеся буквы, оставив их первые вхождения, то есть в слове должны остаться только различные буквы.
36. Дано слово, оканчивающееся символом "_". Вставить заданную букву после первой буквы "и".
37. Дано предложение, оканчивающееся символом “__". Вставить заданную букву перед последней буквой “и”.
38. Путем вставок и удаления символов исправить ошибки:
в слове "прроцесор";
во фразе "текстовыйфайл";
во фразе "програма и аллгоритм";
во фразе "процесор и паммять".
39. Дано ошибочно написанное слово "рпроцессo". Путем перемещения его букв получить слово "процессор". Аналогично для слов:
"иинформаця" - "информация";
"алигортм" - "алгоритм";
"роцессорп” - "процессор".
"ИТЕРНЕТН" - "ИНТЕРНЕТ".
"килбайот" - "килобайт".
С.
1. Дано предложение. В нем слова разделены одним пробелом (начальные и конечные пробелы и символ "—" в предложении отсутствуют). Определить количество слов в предложении.
2. Дано предложение. В нем слова разделены одним или несколькими пробелами (символ "—" в предложении отсутствует). Определить количество слов в предложении. Рассмотреть два случая:
начальные и конечные пробелы в предложении отсутствуют;
начальные и конечные пробелы в предложении имеются.
3. Дано предложение. Найти наибольшее количество идущих подряд пробелов.
4. Дан текст. Найти наибольшее количество идущих подряд одинаковых символов.
5. Дан текст, в котором имеются цифры.
Найти их сумму.
Найти максимальную цифру.
6. Дан текст, в начале которого имеются пробелы и в котором имеются цифры. Найти порядковый номер максимальной цифры, считая, что первый номер имеет первый непробел. Если максимальных цифр несколько, то должен быть найден номер первой из них.
7. Дан текст, представляющий собой десятичную запись целого числа. Вычислить сумму цифр этого числа.1.
8. Дан текст, имеющий вид: d1+d2+…+dn, где di — цифры (n > 1). Вычислить записанную в тексте сумму.
9. Дан текст, имеющий вид: d1–d2+d3–…, где di — цифры (n > 1). Вычислить записанную в тексте алгебраическую сумму.
10. Дан текст, имеющий вид: d1 ± d2 ±...± dn, где di — цифры (n > 1). Вычислить записанную в тексте алгебраическую сумму.
11. Дан текст. Найти наибольшее количество идущих подряд цифр.
Найти сумму всех имеющихся в нем чисел.
Найти максимальное из имеющихся в нем чисел.
12. Дан текст, в котором имеется несколько идущих подряд цифр. Получить число, образованное этими цифрами.
13. Дана последовательность символов, в начале которой имеется некоторое количество одинаковых символов. Определить это количество. Рассмотреть два случая:
известно, что не все символы последовательности одинаковые;
все символы последовательности могут быть одинаковыми.
14. Даны два слова. Определить, сколько начальных букв первого слова совпадает с начальными буквами второго слова. Рассмотреть два случая:
известно, что слова разные;
слова могут быть одинаковыми.
15. Дано предложение. Определить порядковые номера первой пары одинаковых "соседних" символов. Если таких символов нет, то должно быть напечатано соответствующее сообщение. Определить, есть ли в нем сочетания "чу" или "щу". В случае положительного ответа найти также порядковый номер первой буквы первого из них.
16. Дано предложение.
Удалить из него все символы с nl-го по n2-й (n1 < n2).
Удалить из него все буквы "с".
Удалить из него все буквы "о", стоящие на нечетных местах.
17. Проверить, является ли некоторая символьная строка перевертышем после удаления из нее всех пробелов Последние символы "__", полученные после удаления пробелов, не учитывать.
18. Дано слово.
Переставить его s-ю букву на место k-й (s < k). При этом (s + 1)-ю, (s+ 2)-ю, . ., k-ю буквы сдвинуть влево на одну позицию.
Переставить его первую букву на место последней. При этом вторую, третью, ..., последнюю буквы сдвинуть влево на одну позицию.
Переставить его первую букву на место k-й. При этом вторую, третью, ..., k-ю буквы сдвинуть влево на одну позицию.
Переставить его последнюю букву на место первой. При этом первую, вторую, ... , предпоследнюю буквы сдвинуть вправо на одну позицию.
Переставить его последнюю букву на место k-й. При этом k-ю, (k + 1)-ю, . ., предпоследнюю буквы сдвинуть вправо на одну позицию.
Определить, сколько различных букв в нем.
19. В слове имеются только две одинаковых буквы. Найти их.
20. Даны два слова.
Для каждой буквы первого слова (в том числе для повторяющихся в этом слове букв) определить, входит ли она во второе слово. Например, если заданные слова "информация" и "процессор", то для букв первого из них ответом должно быть. "нет нет нет да да нет нет да нет нет".
Для каждой буквы первого слова определить, входит ли она во второе слово. Повторяющиеся буквы первого слова не рассматривать. Например, если заданные слова "процессор" и "информация", то для букв первого из них ответом должно быть: "нет да да да нет нет".
Напечатать только те буквы слов, которые есть только в одном из них (в том числе повторяющиеся). Например, если заданные слова "процессор" и "информация", то ответом должно быть:
"п е с с и ф м а и я".
Напечатать только те буквы слов, которые встречаются в обоих словах только один раз. Например, если заданные слова "процессор" и "информация", то ответом должно быть: "п е ф м л я".
Определить, можно ли из букв первого из них получить второе. Рассмотреть два варианта:
повторяющиеся буквы второго слова могут в первом слове не повторяться;
каждая буква второго слова должна входить в первое слово столько же раз, сколько и во второе.
21. Даны три слова.
Напечатать их общие буквы. Повторяющиеся буквы каждого слова не рассматривать.
Напечатать только те буквы слов, которые есть только в одном из слов. Рассмотреть два варианта: повторяющиеся буквы каждого слова рассматриваются; не рассматриваются.
Напечатать неповторяющиеся в них буквы.
22. Дано предложение из 10 слов. Заполнить ими массив из 10 элементов.
23. Дано предложение.
Напечатать его в обратном порядке слов, например, предложение "мама мыла раму" должно быть напечатано в виде "раму мыла мама".
Поменять местами его первое и последнее слова.
Напечатать все его слова, отличные от слова "привет".
Определить: количество слов, начинающихся с буквы "н"; количество слов, оканчивающихся буквой "т".
Вывести на экран: его слова, начинающиеся и оканчивающиеся на одну и ту же букву; его слова, которые содержат ровно три буквы "е"; его слова, которые содержат хотя бы одну букву "о".
Найти какое-нибудь его слово, начинающееся на букву "к".
Найти длину его самого короткого слова.
Напечатать его самое длинное слово (принять, что такое слово — единственное).
Верно ли, что его самое длинное слово имеет больше 10 символов?
Напечатать все его слова в порядке неубывания их длин.
Напечатать все слова, которые встречаются в нем по одному разу.
Напечатать все его различные слова.
В нем только два слова одинаковые. Найти эти слова.
24. Напечатать все слова предложения, предварительно преобразовав каждое из них по следующему правилу:
заменить первую встреченную букву "а" на "о";
удалить из слова все вхождения последней буквы (кроме нее самой);
оставить в слове только первые вхождения каждой буквы;
в самом длинном слове удалить среднюю (средние) буквы. Принять, что такое слово — единственное.
25. Напечатать те слова последовательности, которые отличны от первого слова и удовлетворяют следующему свойству:
а) в слове нет повторяющихся букв;
b) слово симметрично.
26. Даны два предложения.
Для каждого слова первого предложения (в том числе для повторяющихся в этом предложении слов) определить, входит ли оно во второе предложение.
Для каждого слова первого предложения определить, входит ли оно во второе предложение. Повторяющиеся слова первого предложения не рассматривать.
Напечатать слова, которые есть только в одном из них (в том числе повторяющиеся).
Напечатать слова, которые встречаются в двух предложениях только один раз.
27. Дан текст. Проверить, правильно ли в нем расставлены круглые скобки (то есть, находится ли справа от каждой открывающей скобки соответствующая ей закрывающая скобка, а слева от каждой закрывающей — соответствующая ей открывающая). Предполагается, что внутри каждой пары скобок нет других скобок.
Ответом должны служить слова "да" или "нет".
В случае "неправильности" расстановки скобок:
— если имеются лишние правые (закрывающие) скобки, то выдать сообщение с указанием позиции первой такой скобки;
— если имеются лишние левые (открывающие) скобки, то выдать сообщение с указанием количества таких скобок.
28. Строка содержит арифметическое выражение, в котором используются круглые скобки, в том числе вложенные. Проверить, правильно ли в нем расставлены скобки.
Ответом должны служить слова "да" или "нет".
В случае "неправильности" расстановки скобок:
— если имеются лишние правые (закрывающие) скобки, то выдать сообщение с указанием позиции первой такой скобки;
— если имеются лишние левые (открывающие) скобки, то выдать сообщение с указанием количества таких скобок.