- •Программирование с возвратом из функций нескольких значений
- •Задание
- •Лабораторная работа 2 Обработка строковых данных
- •Задание 1
- •Структуры
- •Задание 1.
- •Модульное программирование
- •Задание
- •Динамические структуры данных. Списки
- •Задание 1
- •Деревья
- •Библиографический список
- •Типы данных
- •Обозначения графические в схемах алгоритмов (гост 19.701-90)
- •Функции ввода-вывода для стандартных потоков
- •Функции для работы со строками
- •Библиотека заголовочных файлов
- •Контейнерные классы
Лабораторная работа 2 Обработка строковых данных
Символьный тип (char) – это тип данных, используемый для описания отдельных символов (знаков, букв, кодов) [1,6,7] .
Основные функции преобразования символов <ctype.h>, ввода/вывода символов, строк (stdio.h) приведены в приложении Е.
Строка – это массив символов. В языке С строка представляет собой массив элементов типа char, завершающийся признаком конца строки ‘\0’.
Основные функции для работы со строками (<string.h>):
unsigned strlen(const char *str); (Определяет длину строки str.)
char *strcpy(char *sp, const char *si); (Копирует строку si в строку sp.)
char * strncpy(char *sp, const char *si, int kol); (Копирует первые kol сим-
волов строки si в строку sp).
int strcmp (const char *str1, const char *str2); (Сравнивает строки str1иstr2.)
int strncmp(const char *str1, const char *str2, int kol); (Сравнивает строку
str1 с kol символами str2.)
char *strcat (char *const char *si);(Объединяет строки (конкатенация).)
char * strncat(char *sp, const char *si, int kol); (Приписывает kol символов
строки si к строке sp )
char * strstr (const char *str1, const char *str2); (Ищет в строке str1 под-
строку str2. )
char *strchr (const char *str, int c); (Ищет в строке str первое вхождение
символа с.)
char * strrchr (const char *str, int c); (Ищет в str последнее вхождение ‘с’)
int strpbrk (const char *str1, const char *str2); (Ищет в строке str1 первое
появление любого из строки str2.)
В приложении Е сведены функции для работы со строками [7] из библиотек <string.h> и <stdlib.h>.
Пример: Ввести строку st1.Сформировать строку st2 перестановкой символов исходной строки в обратном порядке и заменой всех строчных латинских букв прописными.
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void main()
{
int i, j;
char st1[255], st2[255];
clrscr();
printf("Введите строки \n");
gets (st1); // ввод строки
printf ("исходная строка : %s\n",st1);
j = strlen(st1)-1; //максимальный индекс элемента в строке
for ( i=0; i<strlen(st1); ++i)
{
st2[i] = toupper(st1[j]); // изменить регистр
j -= j; // j = j-1
}
st2[i] = '\0'; // символ конца строки
printf("новая строка %s ",st2) ;
printf ("\n"); // перевод строки
getch();
}
Задание 1
1. Дана строка, содержащая не более двадцати латинских букв. Все вхождение «max» в ней заменить на «min» и «макс» на «мин». Подсчитать число таких замен.
2. Дана строка, содержащая сорок латинских букв. Подсчитать все вхождение «abc» в строку и их удалить. Вывести на экран два варианта полученных строк, заполняя образовавшую «дыру» последующими буквами с добавлением в конце пробелов, и, оставляя на месте удаленных символов пробелы.
3. Определить сколько различных символов входит в заданный текст, содержащий не более 100 литер и оканчивающийся точкой.
4. Определить номера позиций гласных букв в заданном тексте.
5. Напечатать заданный текст из 60 символов, удалив из него повторные вхождения каждой литеры.
6. Дана строка, состоящая из слов, разделенных пробелами, в конце строки – точка. Определить, сколько в строке слов, содержащих четное число символов.
7. Дан набор слов на английском языке, разделенных пробелами, в конце точка. Выделить в последовательности нечетные слова прописными буквами.
8. Дан непустой текст из строчных букв, за которыми следует точка. Определить упорядочены ли эти буквы по алфавиты. Напечатать результат проверки и исходный текст прописными буквами.
9. Дана последовательность от двух до восьми слов, в каждом из которых от одной до десяти строчных букв; между соседними словами – не менее одного пробела, за последним словом – точка. Напечатать слово с максимальной длиной.
10. Дано несколько слов, в каждом из которых от одной до семи строчных букв, между соседними словами – не менее одного пробела, за последним словом – точка. Напечатать эти слова в алфавитном порядке.
11. Дана последовательность, содержащая от одного до восьми слов, в каждом из которых от одной до пяти строчных букв; между соседними словами – запятая, за последним словом – точка. Напечатать эту же последовательность, удалив из нее повторные вхождения слов.
12. В заданном тексте (слова разделены пробелами) поменять местами первое и последнее слово.
13. Даны числа K и текст из слов, разделенных пробелами, в конце – точка. Определить количество слов в тексте, состоящих из K букв.
14. Дана последовательность, содержащая от двух до десяти слов, в каждом из которых от одной до восьми строчных букв; между соседними словами – не менее одного пробела, за последним словом – точка. Напечатать те слова, в которых буквы слова упорядочены по алфавиту.
15. Дана последовательность, содержащая от двух до десяти слов, в каждом из которых от одной до пяти строчных букв; между соседними словами – запятая, за последним словом – точка. Напечатать эту же последовательность слов, но в обратном порядке.
16. В заданный текст входят только цифры и буквы. Определить, является ли текст десятичной, шестнадцатеричной или двоичной записью целого либо вещественного числа (указать при выводе какого).
17. В заданном тексте найти и, если есть, напечатать все слова-палиндромы (слова, которые одинаково читаются слева направо и справа налево).
18. Дан текст из слов, разделенных пробелами, в конце - точка. Найти слово наименьшей длины (содержащее наименьшей количество букв).
19. Разработать программу шифровки – дешифровки текста путем замены каждой буквы текста другой, с кодом на N больше (меньше) исходной.
20. Дана непустая последовательность слов, в каждом на которых от одной до шести букв; между соседними словами – запятая, за последним – точка. Напечатать те слова, у которых одинаковые «соседи». (Определить процедуру, которая вводит очередное слово и присваивает его шестилитерной строке, а запятую или точку присваивает некоторой глобальной переменной).
При выполнении задач реализовать перегрузку операции или функции для действий над строками.
Лабораторная работа 3