- •Основы программирования на языке Си Методические указания к выполнению практических работ
- •Предисловие
- •Практическая работа № 1. Структура программы, основные типы данных, ввод/вывод
- •Практическая работа № 2. Ветвления и циклы
- •If (выражение) оператор_1; else оператор_2;
- •If (выражение) оператор;
- •Практическая работа № 3. Указатели
- •Практическая работа № 4. Массивы. Динамическое выделение памяти
- •Практическая работа № 5. Функции
- •Практическая работа №6. Строки
- •Основные функции обработки строк
- •Практическая работа №7. Файлы
- •Основные функции для работы с файлами
- •Постановка задачи
- •Варианты заданий
- •Библиографический список
- •Основы программирования на языке Си
- •190005, С.-Петербург, 1-я Красноармейская ул., д.1
Практическая работа №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.
Варианты заданий
Дана строка символов. Удалить из нее все кратные рядом стоящие одинаковые символы, оставив по одному (АААВВССАВС)
Дана строка символов до точки. Подсчитать, сколько слов она содержит.
Дана строка символов, содержащая предложение, заканчивающееся точкой. Найти в строке самое длинное слово и вывести его на экран.
Дана строка, содержащая фамилию, имя и отчество человека. Преобразовать строку так, чтобы сначала указывались инициалы с точками, а затем фамилия.
Дана строка символов. Удалить из нее все слова нечетной длины. Слова отделяются друг от друга одним пробелом.
Дана строка символов до точки. Выделить в ней все русские буквы, сделав их заглавными.
Дана строка символов до точки. Определить, является ли она палиндромом. (Палиндром слева направо и справа налево читается одинаково, например "Леша на полке клопа нашел") Пробелы и знаки препинания, а также регистр букв не учитываются.
Дана строка символов. Подсчитать, сколько раз в ней встречается подслово «АВВА».
Строка содержит запись натурального десятичного числа. Определить, можно ли представить это число в формате unsigned short int.
Дана строка символов до точки. В каждом слове поменять местами первый и последний символы.
Дана строка, содержащая дату в формате “дд.мм.гггг”. Проверить корректность этой даты и сформировать строку, содержащую следующую по порядку дату.
Дана строка символов до точки. Записать новую строку из слов заданной, содержащих букву «М».
Дана строка символов до точки. Записать слова этой строки в обратном порядке (мама мыла раму раму мыла мама).
Дана символьная строка. Зашифровать в ней все латинские буквы с помощью циклической подстановки ABC…YZA
Дана строка символов. Определить, есть ли среди слов заданной строки числа. Если да, то найти их сумму. Считать, что числа в строке могут быть только целыми.
Дана строка символов до точки. Заменить в строке первую букву каждого слова со строчной на заглавную.
Даны две строки. Составить третью строку из слов, имеющихся в обеих данных строках.
Даны две строки, каждая содержит десятичную запись натурального числа. Определить, какое число больше.
Дана строка символов. Изменить строку – во всех словах, имеющих нечетное количество символов, средний символ удалить.
Даны две строки, каждая содержит десятичную запись натурального числа. Получить строку, содержащую сумму этих чисел.
Дана строка символов до точки. Оставить в ней только слова, начинающиеся на буквы «A», «D», «K», «P».
Дана строка символов до точки. Подсчитать, сколько каких знаков препинания она содержит.
Дана символьная строка. Оставить в ней только слова, содержащие хотя бы одну букву «А».
Дана строка символов до точки. Изменить ее таким образом, чтобы все символы отделялись друг от друга одним пробелом.
Дана строка символов. Поменять местами первое и последнее слова.
Дана символьная строка. Проверить, все ли слова после точки начинаются с заглавной буквы. Если нет – исправить.
Дана строка символов до точки. Определить, сколько слов, состоящих из 5 и более символов, содержит данная строка.
Строка содержит запись арифметического выражения на языке Си. В выражении могут использоваться операции «+», «-», «*», «%», функции sin(), cos(), tan(). Получить строку, содержащую запись этого выражения на языке Паскаль. (Константы, идентификаторы, операции «+», «-», «*» и функции sin() и cos() на Паскале записываются так же, как на Си, операцию «%» следует заменить на « mod », функции вычисления тангенса в Паскале не существует, нужно использовать отношение синуса к косинусу)
Дана строка символов до точки. Удалить из нее все слова, начинающиеся с буквы «а».
Дана строка символов. Удалить из нее все гласные буквы.
Дана символьная строка. Удалить из нее все символы, не являющиеся буквами.
Дана строка символов. Выделить и вывести слова, ограниченные пробелом или знаками препинания: запятая, точка, двоеточие, точка с запятой.
Дана строка символов. Поменять местами N первых и N последних символов заданной строки.
Дана строка символов. Найти в строке самое длинное слово и вывести его на экран.
Дана строка символов. Во всех словах с четным номером поменять местами первый и последний символы.
Строка содержит запись натурального числа в n-ричной системе счисления (n задается пользователем, 0<n<10). Получить строку, содержащую десятичную запись этого числа.
Дана строка символов. Найти длину каждого слова в заданной строке.
Дано натуральное десятичное число. Получить строку, содержащую запись этого числа в троичной системе счисления.
Дана строка символов. Инвертировать все слова в этой строке, последовательность слов сохранить.
Дана строка, состоящая из цифр. Определить минимальное основание системы счисления, которой может принадлежать число, записанное в этой строке.
Контрольные вопросы
Способы организации строк.
Что такое Си-строка? Чем она отличается от массива символов?
Что такое нуль-терминатор?
Чем отличается описание char *st=”Ok” от char st[]=”Ok”?
Как инициализировать строку?
Чем отличается ввод строки с помощью функции scanf() от ввода с помощью функции gets()?
Чем отличается ввод строки с помощью функции gets() от ввода с помощью функции fgets()?
Какие функции ввода строк являются безопасными? Каковы особенности их использования?
Сколько символов выводит на экран функция puts()?
Каковы особенности вывода строк на экран с помощью функции printf()?
Можно ли использовать операцию присваивания для задания значения строки?
Как изменить строку?
Что такое конкатенация строк?
Как преобразовать строку в число?
Как преобразовать число в строку?
Объясните принципы работы функции strtok().
