10. Когда необходимо писать оператор return в функции, не возвращающей значения?

11. Что такое побочный эффект функции?

12. Когда используются формальные параметры-указатели? Какими в этом случае должны быть фактические параметры?

13. Как передать массив в функцию одномерный массив?

14. Как передать в функцию двумерный массив?

15. Как описать функцию, позволяющую работать и с одномерными, и с многомерными массивами?

16. Что такое параметр-константа? Когда используются такие параметры?

17. От чего зависит тип функции? Какие функции считаются однотипными?

18. Что такое указатель на функцию? Как его описать?

19. Как передать функцию в функцию? Что будет являться формальным параметром, что фактическим?

20. Как обратиться к функции, переданной через параметры?

21. Что такое рекурсия? Когда она применяется? Что такое глубина рекурсии?

22. Что такое рекурсивный спуск и рекурсивный возврат?

23. Как описать функцию с переменным числом параметров? Как использовать такую функцию?

24. Какие параметры могут быть у функции main()? Как отлаживать и тестировать программу, содержащую функцию main() с параметрами?

Практическая работа №6. Строки

Цель работы – знакомство с организацией строк в языке Си, изучение библиотечных функций обработки строк и символов.

Основные функции обработки строк

char *strcpy (char *s,char *ct);

копирует строку ct в строку s, включая '\0'; возвращает s.

char *strncpy (char *s, char *ct, size_t n);

копирует не более n символов строки ct в s; возвращает s. Дополняет результат символами '\0', если символов в ct меньше n.

char *strcat (char *s, char *ct);

приписывает ct к s; возвращает s .

char *strncat (char *s, char *ct, size_t n);

приписывает не более n символов ct к s, завершая s символом '\0'; возвращает s.

int strcmp (char *cs, char *st);

сравнивает cs и ct; возвращает отрицательное число, если cs меньше ct; 0, если строки равны; и положительное число, если cs больше ct.

int strncmp (char *cs, char *ct);

сравнивает не более n символов cs и ct аланогично strcmp.

char *strchr (char *cs, char c);

возвращает указатель на первое вхождение c в cs или, если такового не оказалось, NULL.

char *strrchr (char *cs, char c);

возвращает указатель на последнее вхождение c в cs или, если такового не оказалось, NULL

char *strpbrk(char *cs, char *ct);

возвращает указатель в cs на первый символ, который совпал с одним из символов, входящих в ct, или, если такового не оказалось, NULL.

char *strstr(char *cs, char *ct);

возвращает указатель на первое вхождение ct в cs или, если такового не оказалось, NULL.

size_t strlen (char *cs);

возвращает длину cs.

char * strtok(s, ct);

выделяет из строки s лексему, ограниченную символами из ct.

Постановка задачи

Написать две программы согласно индивидуальному варианту. В случае, когда указано, что задается строка до точки, обрезать строку, отбросив все символы после точки, если точки нет, то считать, что строка ограничена точкой. Словом считать любую последовательность символов, ограниченную пробелами, если не указано иное. В одной программе использовать функции библиотеки string.

Варианты заданий

Вариант 1

1. Дана строка символов. Удалить из нее все кратные рядом стоящие одинаковые символы, оставив по одному (АААВВССàАВС)

2. Дана строка символов до точки. Подсчитать, сколько слов она содержит.

Вариант 2

1. Дана строка символов, содержащая предложение, заканчивающееся точкой. Найти в строке самое длинное слово и вывести его на экран.

2. Дана строка, содержащая фамилию, имя и отчество человека. Преобразовать строку так, чтобы сначала указывались инициалы с точками, а затем фамилия.

Вариант 3

1. Дана строка символов. Удалить из нее все слова нечетной длины. Слова отделяются друг от друга одним пробелом.

2. Дана строка символов до точки. Выделить в ней все русские буквы, сделав их заглавными.

Вариант 4

1. Дана строка символов до точки. Определить, является ли она палиндромом. (Палиндром слева направо и справа налево читается одинаково, например "Леша на полке клопа нашел") Пробелы и знаки препинания, а также регистр букв не учитываются.

2. Дана строка символов. Подсчитать, сколько раз в ней встречается подслово «АВВА».

Вариант 5

1. Строка содержит запись натурального десятичного числа. Определить, можно ли представить это число в формате unsigned short int.

2. Дана строка символов до точки. В каждом слове поменять местами первый и последний символы.

Вариант 6

1. Дана строка, содержащая дату в формате “дд.мм.гггг”. Проверить корректность этой даты и сформировать строку, содержащую следующую по порядку дату.

2. Дана строка символов до точки. Записать новую строку из слов заданной, содержащих букву «М».

Вариант 7

1. Дана строка символов до точки. Записать слова этой строки в обратном порядке (мама мыла раму à раму мыла мама).

2. Дана символьная строка. Зашифровать в ней все латинские буквы с помощью циклической подстановки AàBàCà…àYàZàA

Вариант 8

1. Дана строка символов. Определить, есть ли среди слов заданной строки числа. Если да, то найти их сумму. Считать, что числа в строке могут быть только целыми.

2. Дана строка символов до точки. Заменить в строке первую букву каждого слова со строчной на заглавную.

Вариант 9

1. Даны две строки. Составить третью строку из слов, имеющихся в обеих данных строках.

2. Даны две строки, каждая содержит десятичную запись натурального числа. Определить, какое число больше.

Вариант 10

1. Дана строка символов. Изменить строку – во всех словах, имеющих нечетное количество символов, средний символ удалить.

2. Даны две строки, каждая содержит десятичную запись натурального числа. Получить строку, содержащую сумму этих чисел.

Вариант 11

1. Дана строка символов до точки. Оставить в ней только слова, начинающиеся на буквы «A», «D», «K», «P».

2. Дана строка символов до точки. Подсчитать, сколько каких знаков препинания она содержит.

Вариант 12

1. Дана символьная строка. Оставить в ней только слова, содержащие хотя бы одну букву «А».

2. Дана строка символов до точки. Изменить ее таким образом, чтобы все символы отделялись друг от друга одним пробелом.

Вариант 13

1. Дана строка символов. Поменять местами первое и последнее слова.

2. Дана символьная строка. Проверить, все ли слова после точки начинаются с заглавной буквы. Если нет – исправить.

Вариант 14

1. Дана строка символов до точки. Определить, сколько слов, состоящих из 5 и более символов, содержит данная строка.

2. Строка содержит запись арифметического выражения на языке Си. В выражении могут использоваться операции «+», «-», «*», «%», функции sin(), cos(), tan(). Получить строку, содержащую запись этого выражения на языке Паскаль. (Константы, идентификаторы, операции «+», «-», «*» и функции sin() и cos() на Паскале записываются так же, как на Си, операцию «%» следует заменить на « mod », функции вычисления тангенса в Паскале не существует, нужно использовать отношение синуса к косинусу)

Вариант 15

1. Дана строка символов до точки. Удалить из нее все слова, начинающиеся с буквы «а».

2. Дана строка символов. Удалить из нее все гласные буквы.

Вариант 16

1. Дана символьная строка. Удалить из нее все символы, не являющиеся буквами.

2. Дана строка символов. Выделить и вывести слова, ограниченные пробелом или знаками препинания: запятая, точка, двоеточие, точка с запятой.

Вариант 17

1. Дана строка символов. Поменять местами N первых и N последних символов заданной строки.

2. Дана строка символов. Найти в строке самое длинное слово и вывести его на экран.

Вариант 18

1. Дана строка символов. Во всех словах с четным номером поменять местами первый и последний символы.

2. Строка содержит запись натурального числа в n-ричной системе счисления (n задается пользователем, 0<n<10). Получить строку, содержащую десятичную запись этого числа.

Вариант 19

1. Дана строка символов. Найти длину каждого слова в заданной строке.

2. Дано натуральное десятичное число. Получить строку, содержащую запись этого числа в троичной системе счисления.

Вариант 20

1. Дана строка символов. Инвертировать все слова в этой строке, последовательность слов сохранить.

2. Дана строка, состоящая из цифр. Определить минимальное основание системы счисления, которой может принадлежать число, записанное в этой строке.

Контрольные вопросы

1. Способы организации строк.

2. Что такое Си-строка? Чем она отличается от массива символов?

3. Что такое нуль-терминатор?

4. Чем отличается описание char * st=”Ok” от char st []=”Ok”?

5. Как инициализировать строку?