Лабораторные работы С (для ИВТ) / Готовые лабы С / Лаба6 / ЛабРаб 6
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное бюджетное образовательное учреждение высшего образования «Поволжский государственный университет телекоммуникаций и информатики» |
||
|
||
|
||
Факультет |
Факультет № 1. |
|
|
||
Направление подготовки / специальность |
09.03.01 Информатика и вычислительная техника |
|
|
||
|
||
Кафедра информатики и вычислительной техники |
|
|
|
|
|
ФИО студента
|
|
|
|
|
|
Группа студента
|
|
|
|
|
|
,Лабораторная работа № 6
по программированию С
Тема: Строки
Цель работы: знакомство с организацией строк в языке Си, изучение библиотечных функций обработки строк и символов
Вариант 4
1. Дана строка символов до точки. Определить, является ли она палиндромом. (Палиндром слева направо и справа налево читается одинаково, например "Лёша на полке клопа нашёл") Пробелы и знаки препинания, а также регистр букв не учитываются.
2. Дана строка символов. Подсчитать, сколько раз в ней встречается подслово «АВВА».
Ход работы:
1.
2.
Ответы на контрольные вопросы
Способы организации строк:
В C строки представляют собой последовательность символов, завершающуюся нулевым символом (\0).
Существует несколько способов их организации:
• Массивы символов: Строка хранится в массиве символов, где последний элемент - это нуль-терминатор.
• Указатели на символы: Указатель указывает на первый символ строки, и используется для доступа к остальным символам.
Си-строка и массив символов:
Си-строка - Это строка, которая хранится в массиве символов и завершается нулевым символом.
Массив символов: Массив может содержать как строку, так и просто набор символов.
Ключевое различие: Си-строка обязательно содержит нулевой терминатор, а массив символов может его не содержать.
Нуль-терминатор:
Нуль-терминатор (\0) - это специальный символ, который сигнализирует о конце строки. Он позволяет функциям, работающим со строками, точно знать, где строка заканчивается.
4. char *st="Ok" vs. char st[]="Ok": • char *st="Ok": Создается указатель на строку. Строка "Ok" хранится в константной памяти, а указатель st ссылается на нее. • char st[]="Ok": Создается массив символов st, инициализированный строкой "Ok" (включая нуль-терминатор). Строка хранится в памяти, выделенной для массива.
5. Инициализация строки:
• При объявлении: char st[]="Ok";
• С помощью функции strcpy(): strcpy(st, "New string");
• Ввод с клавиатуры: scanf("%s", st); или gets(st);
6. scanf() vs. gets():
• scanf("%s", st);: Считывает строку с клавиатуры до первого пробела.
• gets(st);: Считывает всю строку с клавиатуры, включая пробелы, до нажатия клавиши Enter.
7. gets() vs. fgets():
• gets(st);: Небезопасная функция. Не контролирует размер буфера, что может привести к переполнению.
• fgets(st, MAX_SIZE, stdin);: Безопасная функция. Принимает максимальный размер буфера и считывает строку, не превышающую этот размер.
8. Безопасные функции ввода строк:
• fgets(st, MAX_SIZE, stdin);: Ограничивает количество вводимых символов размером буфера. • getline(): Более современная функция, позволяющая читать строки переменной длины.
9. puts(): Функция puts() выводит на экран строку, включая нуль-терминатор.
10. printf():
Функция printf() предоставляет более гибкий вывод, позволяющий форматировать строки, выводить числа и другие данные.
11. Присваивание строк:
Операция присваивания = не работает с строками напрямую. Например, st = "New string"; не скопирует новую строку.
12. Изменение строки:
Для изменения строки используют функции:
• strcpy(st, "New string"); - копирует новую строку в st.
• strcat(st, "Append"); - добавляет строку к концу st.
• strncpy(st, "Partial copy", 3); - копирует только 3 символа из "Partial copy" в st.
13. Конкатенация строк:
Конкатенация - это соединение двух строк в одну. strcat(st1, st2); - добавляет строку st2 к концу st1.
14. Преобразование строки в число:
• int atoi(char *str); - преобразует строку str в целое число.
• float atof(char *str); - преобразует строку str в число с плавающей точкой.
15. Преобразование числа в строку:
• sprintf(str, "%d", number); - записывает целое число number в строку str.
• sprintf(str, "%f", number); - записывает число с плавающей точкой number в строку str.
16. strtok(): Функция strtok() разбивает строку на токены, используя заданный разделитель. Она возвращает указатель на следующий токен, пока не достигнет конца строки. Пример использования strtok():
