
- •1 Курс, 2 семестр
- •230105 Программное обеспечение вычислительной техники и автоматизированных систем
- •График выполнения лабораторных работ
- •Блок-схемы алгоритмов и откорректированные после выполнения тексты функций, реализующих программы.
- •Вводное занятие к лабораторным работам
- •Базовые стандартные типы данных
- •В каждой очерченной части находятся операторы с одинаковым приоритетом
- •Создание нового проекта
- •Добавление к проекту нового файла с исходным текстом
- •Компиляция, компоновка и выполнение проекта
- •Открытие существующего проекта
- •Научитесь общаться с компилятором при появлении ошибок в тексте вашей программы
- •Добавление к проекту существующего файла с исходным текстом
- •Приложение 1
- •Лабораторная работа № 1
- •Тексты индивидуальных задач, выполняемых в лабораторной работе
- •Лабораторная работа № 2
- •Тексты индивидуальных задач, выполняемых в лабораторной работе
- •Лабораторная работа № 3
- •Тексты индивидуальных задач, выполняемых в лабораторной работе
- •Лабораторная работа № 4
- •Тексты индивидуальных задач, выполняемых в лабораторной работе
- •Лабораторная работа № 5
- •Тексты индивидуальных задач, выполняемых в лабораторной работе
- •Лабораторная работа № 6
- •Тексты индивидуальных задач, выполняемых в лабораторной работе
- •Лабораторная работа № 7
- •Тексты индивидуальных задач, выполняемых в лабораторной работе
Лабораторная работа № 7
СТРОКИ В ЯЗЫКЕ С++
Цель работы: Составление алгоритмов и написание многомодульных программ циклической структуры обработки строк в среде СИ++.
Общие указания к заданиям лабораторной работы.
По номеру Вашего варианта выбрать задачу, решаемую в этой лабораторной работе, и выполнить для нее следующие задания.
Для решения задачи разработайте следующие функции:
индивидуальные функции, определенные в Вашем варианте.
Указанные в индивидуальном задании функции разработать двумя способами:
Способ 1. Доступ к нужному символу в строке (движение по строке) осуществлять путем изменения смещения (индекса) относительно неизменяемого начального адреса строки;
Способ 2. Доступ к нужному символу в строке (движение по строке) осуществлять путем изменения значения указателя (адреса) этого символа.
Функции при необходимости могут (или должны) быть разделены на ряд составляющих функций;
для функций, которые попросили создать в двух вариантах, разработать функцию тестирования. В этой функции-тесте предусмотреть возможность сравнения на экране результатов двух реализаций (вариантов 1, 2). Тестирующая функция должна продемонстрировать правильность и идентичность работы алгоритмов для двух способов реализации Ваших индивидуальных функций. Данные-строки, на которых осуществляется тестирование, задать в самом тексте тестирующей функции в виде строковых констант (Они не должны вводиться с клавиатуры!). Набор данных-констант, на которых тестируются функции должен охватывать все возможные пограничные случаи возможных представлений данных.
функцию без параметров, решающую конкретную задачу Вашего варианта с использованием разработанных Вами индивидуальных функций в реализации способа 2 для произвольных, вводимых с клавиатуры данных. Необходимо уметь объяснять преподавателю, почему для строк предпочтительнее этот способ обработки, почему при обработке числовых массивов такой способ его обработки не был так актуален.
Функция main должна содержать:
меню, которое позволяет сделать выбор режима работы с программой – режима тестирования или режима применения разработанной функции для решения конкретной задачи. Для организации меню использовать инструкцию выбора switch;
возможность многократного выполнения программы.
Функции сгруппируйте в файлы и создайте проект. Откомпилируйте отдельные файлы проекта и выполните его.
Тексты индивидуальных задач, выполняемых в лабораторной работе
Задача 7.01
Функция char* rat (char* str, char Symb, int& len) получает строку, символ и возвращает через возвращаемое значение адрес первой найденной подстроки, начинающейся и заканчивающейся заданным символом Symb, а также ее длину через параметр по ссылке. Если такой подстроки нет в строке, то функция возвращает 0.
Функция void delNsymbl (char* str, int N) удаляет из полученной строки N первых символов.
Функция char* ratN (char* str, char Symb, int N) получает строку, символ и число N, находит N-тую подстроку, начинающуюся и заканчивающуюся полученным символом, и удаляет все символы этой подстроки, кроме последнего ограничивающего ее символа Symb. Если удаление невозможно, функция возвращает 0, в противном случае возвращает через возвращаемое значение адрес полученной строки. Используйте при разработке алгоритма этой функции функции rat и delNsymbl
Программа, используя функцию ratN, удаляет из полного имени файла D:\FOXPRO\BASE\FILES\base.dbf подстроку \FILES.
В двух вариантах выполнить функции rat и delNsymbl.
Задача 7.02
Функция void delNSymbl(char* str, int n) получает строку, число n и удаляет из строки первые n символов.
Функция char* poiskPstrS1toS2(char* str,char s1, char s2, int& len) получает строку и находит в ней первую подстроку от символа s1 до символа s2, возвращает через возвращаемое значение адрес этой первой найденной подстроки, а также ее длину через параметр по ссылке. Если такая подстрока не найдена, то функция возвращает 0.
Функция char* poiskSymb(char* str, int len, char symb) получает строку и находит среди первых len символов этой строки символ symb и возвращает его адрес. Если символ не найден, то функция возвращает адресный 0.
Функция char* deleteS1inPstrS1toS2(char* str, char S1, char S2 ) в строке ищет все подстроки от символа S1 до символа S2 и удаляет ту из них, которая содержит внутри себя хотя бы один символ S1. Функция возвращает через возвращаемое значение адрес строки, если удалось удалить хотя бы одну подстроку, в противном случае возвращает 0. Используйте при разработке алгоритма функции функции poiskPstrS1toS2, poiskSymb, delNSymbl.
Программа вводит два символа и строки и для каждой из строк ищет все подстроки от первого символа до второго символа и удаляет ту из них, которая содержит внутри себя хотя бы один первый введенный символ. Программа подсчитывает количество строк, подвергшихся изменению.
В двух вариантах выполнить только функции delNSymbl, poiskPstrS1toS2.
Задача 7.03
Функция int isAlfa (char s) получает символ и определяет, является ли он символом латиницы или кириллицы(строчным или прописным)
Функция char* strAlfa(char* str, int& lenAlfa) получает строку str и ищет первую буквенную подстроку. Функция возвращает через возвращаемое значение адрес найденной подстроки и ее длину через параметр по ссылке или 0, если в строке нет буквенной подстроки символов.
Функция void qaz(char* str, int n) получает строку str и преобразует ее, переставляя в обратном порядке n первых символов.
Функция char* qazN(char* str, int k) получает строку str и число k и преобразует в строке каждую k–ую буквенную подстроку, переставляя буквы в ней в обратном порядке. Функция через возвращаемое значение возвращает адрес строки str, если ее удалось изменить, в противном случае возвращает 0. Используйте при разработке алгоритма этой функции функции strAlfa, qaz.
Программа со стандартного устройства ввода считывает число n и фразу, состоящую из N слов (точное количество слов во фразе задает пользователь заранее). Программа изменяет каждое слово фразы с помощью функции qazN и выводит на экран только измененные слова исходной фразы. Программа подсчитывает количество не преобразованных слов в исходной фразе.
В двух вариантах выполнить только функции strAlfa, qaz.
Задача 7.04
Функция char* findPstrEqualStr1(char* str, char* str1), получив строку str, ищет в ней первую подстроку, равную строке str1. Если такая подстрока найдена, то функция возвращает через возвращаемое значение адрес найденной подстроки. Если подстрока не найдена, то функция возвращает адресный 0.
Функция void delNsymbl(char* str, int n) получает строку, число n и удаляет из строки первые n символов.
Функция void insertPstr(char* str, char* pstr) получает строки str и pstr и вставляет строку pstr в начало строки str.
Функция char* zamenaStr1Str2(char* str, char* str1, char* str2) получает строку str, строки str1 и str2, ищет в строке str все подстроки, равные строке str1. Функция после каждой найденной нечетной подстроки вставляет подстроку, равную строке str2, а четную подстроку удаляет. Функция через возвращаемое значение возвращает адрес строки str, если ее удалось изменить, в противном случае возвращает 0. Используйте при разработке алгоритма функции функции findPstrEqualStr1, delNSymbl, insertPstr.
Программа вводит две строки str1 str2 и для каждой из введенных строк str ищет все подстроки, равные строке str1. Функция после каждой найденной нечетной подстроки вставляет подстроку, равную строке str2, а четную подстроку удаляет. Программа подсчитывает количество строк, подвергшихся изменению.
В двух вариантах выполнить только функции insertPstr, findPstrEqualStr1.
Задача 7.05
Функция int isCifr(char symb) получает символ и определяет, является ли он цифровым символом.
Функция char* poiskCifrPodstrok(char* str, int& len) получает строку, находит в ней первую цифровую подстроку и возвращает через возвращаемое значение ее адрес и через параметр по ссылке ее длину. Если такая подстрока не найдена, то функция возвращает 0.
Функция void pushNSymbol(char* str, char s, int N) получает строку, символ s число N и вставляет в начало строки N символов s.
Функция char* dobavitSymbol(char* str, char s) в строке ищет все цифровые подстроки и перед каждой вставляет полученный через параметры символ число раз, равное первой цифре найденной подстроки. Функция возвращает через возвращаемое значение адрес строки, если удалось вставить хотя бы один символ, в противном случае 0. Используйте при разработке алгоритма функции функции poiskCifrPodstrok, pushNSymbol.
Программа вводит один символ, а затем строки и для каждой из строк ищет все цифровые подстроки. Перед каждой найденной цифровой подстрокой программа вставляет введенный символ число раз, равное первой цифре найденной подстроки. Программа подсчитывает количество строк, подвергшихся изменению.
В двух вариантах выполнить только функции poiskCifrPodstrok, pushNSymbol.
Задача 7.06
Функция char* ravnoPstr(char* str, char* str1), получив строку str, ищет в ней первую подстроку, равную строке str1. Если такая подстрока найдена, то функция через возвращаемое значение возвращает адрес найденной подстроки. Если подстрока не найдена, то функция возвращает адресный 0.
Функция void insertPstrBegin (char* str, char* pstr) получает строки str и pstr и вставляет строку pstr в начало строки str.
Функция char* dublPstr(char* str, char* str1) получает строку str и строку str1 и ищет в строке str все подстроки, равные строке str1. Если перед найденной подстрокой стоит символ, равный символу, следующему сразу за этой подстрокой, то эта подстрока дублируется в строке (функция вставляет ее же). Функция через возвращаемое значение возвращает адрес строки str, если строку удалось изменить, в противном случае возвращает 0. Используйте при разработке алгоритма функции функции ravnoPstr, insertPstrBegin.
Программа вводит строку1, а затем строки в каждой из которых ищутся подстроки, равные строке1, и каждую найденную подстроку, обрамленную одинаковыми символами дублирует. Программа подсчитывает количество строк, подвергшихся изменению.
В двух вариантах выполнить только функции ravnoPstr, insertPstrBegin.
Задача 7.07
Функция char* poiskPodstrokSymb(char* str,char symb, int& len) получает строку, находит в ней первую подстроку, состоящую только из символа symb, и возвращает через возвращаемое значение ее адрес и через параметр по ссылке ее длину. Если такая подстрока не найдена, то функция возвращает 0.
Функция void pushStr (char* str, char* str1) получает строки str и str1 и вставляет строку str1 в начало строки str.
Функция void deleteNSymbl(char* str, int n) получает строку, число n и удаляет из строки первые n символов.
Функция char* zamenaSymbStr(char* str, char symb, char* str1) получает строку str, символ symb и строку str1 и ищет в строке str все подстроки, состоящие из символа symb. Если длина найденной подстроки больше длины строки str1, то найденная подстрока заменяется строкой str1. Функция через возвращаемое значение возвращает адрес строки, если удалось заменить хотя бы одну подстроку, в противном случае возвращает 0. Используйте при разработке алгоритма функции функции poiskPodstrokSymb, deleteNSymbl, pushStr.
Программа вводит символ и одну строку1, а затем строки в каждой из которых ищутся подстроки, состоящие из введенного символа, и те, которые по длине оказываются больше длины первой введенной строки, заменяют на эту строку1. Программа подсчитывает количество строк, подвергшихся изменению.
В двух вариантах выполнить только функции poiskPodstrokSymb, pushStr.
Задача 7.08
Функция int isLatin (char s) получает символ и определяет, является ли он символом латиницы.
Функция char* isStrLatin (char* str, int& len) получает исходную строку str и ищет в ней первую подстроку, содержащую только символы латиницы (строчные или прописные буквы). Если такая подстрока найдена, функция возвращает через параметр по ссылке ее длину и ее адрес через возвращаемое значение, или 0 в противном случае. Используйте при разработке алгоритма функции функцию isLatin .
Функция int sumLenPstr(char* str) для строки, полученной через параметры, подсчитывает и возвращает сумму длин предпоследней и последней из найденных подстрок, состоящих из символов латиницы. Если подстрок меньше двух, то функция возвращает ноль. Используйте при разработке алгоритма функции функцию isStrLatin.
Программа со стандартного устройства ввода считывает строки и, используя функцию sumLenPstr, для каждой введенной строки подсчитывает и выдает на экран суммарную длину предпоследней и последних подстрок для всех введенных строк, состоящих из символов латиницы. Подсчитать, сколько строк не внесли вклада в полученную сумму.
В двух вариантах выполнить только функцию isStrLatin .
Задача 7.09
Функция int isLatin (char s) получает символ и определяет, является ли он символом латиницы (строчной или прописной буквы латинского алфавита)
Функция char* isStrLatin (char* str, int& n) получает строку str и ищет в ней первую подстроку, содержащую только символы латиницы (строчные или прописные буквы латинского алфавита). Если такая подстрока найдена, функция возвращает через параметр по ссылке длину подстроки и ее адрес через возвращаемое значение, или 0 в противном случае. Используйте при разработке алгоритма функции функцию isLatin.
Функция int raznLenPstr(char* str) для строки, полученной через параметры, подсчитывает и возвращает разность длин первой и последней из найденных подстрок, состоящих из символов латиницы. Если подстрок меньше двух, функция возвращает ноль. Используйте при разработке алгоритма функции функцию isStrLatin.
Программа со стандартного устройства ввода считывает строки и, используя функцию raznLenPstr, для каждой введенной строки подсчитывает разность длин первой и последней из найденных подстрок, состоящих из символов латиницы. Если подстрок меньше двух, программа выдает об этом сообщение.
В двух вариантах выполнить только функцию isStrLatin .
Задача 7.10
Функция char* padleft( char* str, char symb, int n) получает строку str, символ symb, число n и добавляет к строке str слева n символов symb. Функция через возвращаемое значение возвращает адрес str.
Функция char* push(char* str, char symb, int n) через каждые n символов строки str вставляет n же символов symb. Функция через возвращаемое значение возвращает адрес строки, если ее удалось преобразовать, и 0, если не удалось. Функция должна использовать функцию padleft.
Программа со стандартного устройства ввода считывает символ, число и фразу, состоящую из N слов (точное количество слов в фразе задает пользователь заранее), и, используя функцию push преобразует слова и выдает на экран преобразованную фразу, в которой включены только те слова, которые не подвергались изменению.
В двух вариантах выполнить только функцию padleft.
Задача 7.11
Функция char* adjacentDel (char* str), получает строку str и удаляет из нее первый символ, код которого оказался смежным с кодом следующего символа (смежными кодами назовем числа, значения которых отличаются на 1). Функция через возвращаемое значение возвращает адрес удаленного символа, если удалось удалить такой символ, и 0, если не удалось.
Функция char* adjacentDelAll (char* str), получает строку str и удаляет из нее все символы, коды которых оказались смежными с кодом следующего за ними символов. Функция через возвращаемое значение возвращает адрес строки, если удалось удалить хотя бы один такой символ, и 0, если не удалось. Функция должна использовать функцию adjacentDel.
Программа со стандартного устройства ввода считывает фразу, состоящую из N слов (точное количество слов во фразе задает пользователь заранее), и, используя функцию adjacentDelAll, выдает на экран преобразованную фразу, в которой оставлены только измененные слова исходной фразы.
В двух вариантах выполнить только функцию adjacentDel.
Задача 7.12
Функция void add(char* str, char symb, int n) получает строку str, количество вставляемых символов n, вставляемый символ symb и вставляет n символов в начало строки str.
Функция char* insert(char* str, char symb1, int n, char symb2) получает строку и ищет в ней символы symb1 и после каждого найденного символа вставляет n символов symb2. Функция через возвращаемое значение возвращает адрес строки, если строка преобразовывалась, в противном случае функция возвращает 0. Функция должна использовать разработанную функцию add.
Программа со стандартного устройства ввода считывает число, два символа symb1, symb2 и фразу, состоящую из N слов (точное количество слов во фразе задает пользователь заранее). Программа выдает на экран только те слова введенной фразы, которые были преобразованы с помощью функции insert. Программа подсчитывает количество не преобразованных слов в исходной фразе.
В двух вариантах выполнить только функции add и insert.
Задача 7.13
Функция char* poiskPstr(char* str, char symbLeft, char symbRight, int& len) получает строку str, и ищет первую подстроку, начинающуюся с символа, равного символу symbLeft и кончающуюся первым встретившимся в этой строке символом, равным symbRight. Если хотя бы один из ограничивающих символов symbLef или symbRight подстроки не найдены, функция возвращает 0. В противном случае функция через возвращаемое значение возвращает адрес найденной подстроки и через параметр по ссылке ее длину.
Функция void insert(char* str, char symb) получает строку и символ и вставляет символ в начало строки.
Функция char* insertNumber(char* str, char symbLeft, char symbRight) получает строку str, и ищет в ней все подстроки, начинающиеся с символа, равного символу symbLeft и заканчивающиеся первым встретившимся в этой строке символом, равным symbRight, и после каждой подстроки вставляет символ-цифру, равный остатку от деления длины этой подстроки на 9 плюс 1. Если подстроки не найдены, функция возвращает 0. В противном случае функция через возвращаемое значение возвращает адрес преобразованной строки. Функция должна использовать разработанные функции poiskPstr и insert.
Программа вводит слово, содержащее несколько пар открывающих и закрывающих круглых скобок, и последовательно вставляет с помощью функции insertNumber цифровые символы после каждой подстроки, заключенной в эти скобки, включая сами скобки. Предполагается, что внутри каждой пары скобок нет других скобок.
В двух вариантах выполнить только функции poiskPstr и insert.
Задача 7.14
Функция char* goll( char* str, int& len) получает строку str (в ней могут быть пробелы), и ищет в этой строке первое «слово» (последовательность значащих символов, ограниченную пробелами). Функция через возвращаемое значение возвращает адрес найденного «слова» и через параметр по ссылке его длину. Если «слова» в строке нет, то возвращается длина «слова», равная 0 и адрес 0 .
Функция char* gollMin( char* str, int& len) получает строку с пробелами - фразу, состоящую из «слов», разделенных одним или более пробелами, и, с помощью функции goll, определяет адрес первого самого короткого «слова» и его длину. Если в строке найдено всего одно «слово», то функция возвращает адресный 0.
Программа с клавиатуры вводит последовательно несколько фраз (строк с пробелами) и для каждой из них определяет первое слово, имеющее минимальную длину. Если такое слово найдено, то оно выдается на экран, если же слово во фразе единственное, то об этом выдается сообщение.
Для ввода строки с пробелами используйте стандартную потоковую функцию istream& get(char* str, int len, char = '\n').
В двух вариантах выполнить только функцию goll.
Задача 7.15
Функция char* dubl(char* str, int& len) получает строку str и ищет в ней первую группу повторяющихся символов (идущих подряд одинаковых символов). Функция через возвращаемое значение возвращает адрес и через параметр по ссылке длину такой группы символов, если она есть, и адресный 0 и длину 0, если в строке нет ни одного повторяющегося символа.
Функция void delNsymbl(char* str, int n) получает строку, число n и удаляет из строки первые n символов.
Функция char* small(char* str) получает строку str и «сжимает» строку, удалив из нее все, кроме одного, одинаковые символы, следующие подряд. Если таких символов в строке не найдено, то функция возвращает 0, в противном случае через возвращаемое значение возвращает адрес «сжатой» строки str. Используйте при разработке алгоритма функции функции dubl и delNsymbl.
Программа со стандартного устройства ввода считывает фразу, состоящую из N слов (точное количество слов во фразе задает пользователь заранее), и выдает на экран преобразованную фразу, в которой слова «сжаты» с помощью функции small. Программа подсчитывает количество не преобразованных слов в исходной фразе.
В двух вариантах выполнить только функции dubl и delNsymbl.
Задача 7.16
Функция char* findSymbPstr(char* str, char symb, int& len) получает строку, символ и ищет в ней подстроку, состоящую из полученного символа. Функция возвращает адрес найденной подстроки и ее длину. Если подстрока не найдена, то функция возвращает 0.
Функция void delNsymbl(char* str, int n) получает строку, число n и удаляет из строки первые n символов.
Функция int smallgap(char* str) получает строку str с пробелами и удаляет лишние пробелы, оставляя только по одному пробелу. Функция возвращает 0, если подстроки пробелов не найдены или не удалено ни одного пробела. В противном случае функция возвращает количество удаленных пробелов. Используйте при разработке алгоритма функции функции findSymbPstr и delNsymbl.
Программа вводит строку с пробелами - фразу, состоящую из «слов», разделенных одним или более пробелами, и с помощью функции smallgap, удаляет все «лишние» пробелы. Функция подсчитывает суммарное количество удаленных пробелов между «словами» в каждой фразе.
Для ввода строки с пробелами используйте стандартную потоковую функцию istream& get(char* str, int len, char = '\n').
В двух вариантах выполнить только функции findSymbPstr и delNsymbl.
Задача 7.17
Функция char* push(char* str) получает строку str и вставляет в первую позицию символ, стоящий на этой позиции (дублирует этот символ). Функция возвращает адрес преобразованной строки str .
Функция char* detl(char* str, int nInsert) получает строку str, позицию nInsert вставки в ней символа и вставляет через каждые nInsert символов символ, стоящий на этой позиции (дублирует символ). Функция через возвращаемое значение возвращает адрес преобразованной строки str или 0, если позиция вставки nInsert выходит за длину строки str. Функция detl должна использовать функцию push.
Программа со стандартного устройства ввода считывает число nInsert и фразу, состоящую из N слов (точное количество слов во фразе задает пользователь заранее), и выдает на экран преобразованную фразу, в которой продублирован каждый nInsert символ слова. Программа подсчитывает количество слов, в которых дублировались символы.
В двух вариантах выполнить только функцию push.
Задача 7.18
Функция void delNsymbl(char* str, int n) получает строку, число n и удаляет из строки первые n символов.
Функция, char* poisk1BigAlfa(char* str) получив строку, ищет в ней адрес первого прописного буквенного латинского символа, за которым следует или перед которым стоит его строчный символ. Функция через возвращаемое значение возвращает найденный адрес Если таких символов нет, функция возвращает 0.
Функция char* smallSymb(char* str) получает строку str и удаляет прописные символы, если они дублируют рядом стоящий строчный символ. Функция через возвращаемое значение возвращает адрес преобразованной строки str или 0, если в строке не удалялось ни одного прописного символа. Используйте при разработке алгоритма функции функции delNsymbl и poisk1BigAlfa.
Программа со стандартного устройства ввода считывает фразу, состоящую из N слов (точное количество слов во фразе задает пользователь заранее), и выдает на экран преобразованную фразу, в которой все слова отредактированы функцией smallSymb. Программа подсчитывает количество слов, не подвергнутых редактированию.
В двух вариантах выполнить только функции poisk1BigAlfa.
Задача 7.19
Функция int isCifr(char symb) получает символ и определяет, является ли он цифровым символом.
Функция char* poiskCifrPodstrok(char* str, int& len) получает строку, находит в ней первую цифровую подстроку и возвращает через возвращаемое значение ее адрес и через параметр по ссылке ее длину.
Функция char* stod(char* str) получает строку str, и ищет в ней первую цифровую подстроку-дату в форме jjjjmmdd, где jjjj - год, mm- номер месяца (число 01 – 12), dd - день(число 01 – 30; примите допущение, что в каждом месяце 30 дней). Если в строке не найдена подстрока-дата, то функция возвращает 0, в противном случае функция через возвращаемое значение возвращает адрес найденной подстроки. Функция должна использовать разработанную функцию poiskCifrPodstrok.
Функция char* delNsymbl (char* str, int N) удаляет из полученной строки N первых символов.
Функция char* stodChangeAll(char* str) получает строку str, ищет в ней подстроки-даты и в каждой из них удаляет две первые цифры года. Если функция сделала хотя бы одно преобразование, она через возвращаемое значение возвращает адрес строки, в противном случае 0. Функция должна использовать разработанные функции stod и delNsymbl.
Программа со стандартного устройства ввода считывает фразу, состоящую из N слов (точное количество слов в фразе задает пользователь заранее), и выдает на экран преобразованную фразу, в которую включены только преобразованные слова.
В двух вариантах выполнить только функции stod и delNsymbl.
Задача 7.20
Функция char* poiskPstr (char* str, char* pstr) получает стpоку str, строку pstr и ищет в строке str подстpоки, равные строке pstr. Функция возвращает через возвращаемое значение адрес найденной подстроки, если она найдена, иначе возвращается адресный 0.
Функция char* udalNsymbl (char* str, int N) удаляет из полученной строки N первых символов.
Функция void insertPstr(char* str, char* pstr) вставляет в начало строки str строку pstr.
Функция char* poisk2Pstr (char* str, char* pstr1, char* pstr2) получает стpоку str, строки pstr1 и pstr2 и ищет в строке str первую и последнюю подстpоки, равные строке pstr1 и, если находит их, заменяет на подстроку pstr2. Функция возвращает через возвращаемое значение адрес строки, если удалось сделать замену, в противном случае функция возвращает адресный 0. Используйте при разработке алгоритма функции функции poiskPstr, udalNsymbl и insertPstr.
Программа вводит с клавиатуры две строки pstr1, pstr2 и для каждого из N введенного слова программа осуществляет поиск первой и последней подстрок pstr1 и замены их на подстроку pstr2. Функция выдает на экран каждое преобразованное слово. Функция подсчитывает количество не преобразованных слов.
В двух вариантах выполнить только функции poiskPstr и insertPstr.
Задача 7.21
Функция char* tatu (char* str, int nLen) получает строку str и удаляет из нее nLen первых символов. Функция возвращает адрес str.
Функция char* tatuN (char* str, int N,char symb,int nLen) получает строку str и после каждого N символа symb удаляет nLen символов строки. Если при очередном удалении удаляется один из символов symb, то в дальнейшем подсчете N символа он не учитывается. Если строку не удалось преобразовать, функция возвращает 0, иначе возвращает через возвращаемое значение адрес строки. Используйте при разработке алгоритма функции функцию tatu.
Программа со стандартного устройства ввода считывает символ symb, числа N и nLen и фразу, состоящую из n слов (точное количество слов во фразе задает пользователь заранее). Программа изменяет каждое слово фразы с помощью функции tatuN и выводит на экран только измененные слова исходной фразы. Программа подсчитывает количество не преобразованных слов в исходной фразе.
В двух вариантах выполнить только функцию tatu.
Задача 7.22
Функция char* findPstr(char* str1, char* str2), получив строку str1, ищет в ней первую подстроку, равную строке str2. Если такая подстрока найдена, то функция через возвращаемое значение возвращает адрес найденной подстроки. Если подстрока не найдена, то функция возвращает 0.
Функция void replaceNSymb(char* str*,int nSymb), получив строку str и число nSymb, первые nSymb символов записывает в этой стоке в обратном порядке.
Функция char* replaceSubStr(char* str, char* strSub, int n) получает строку str, строку strSub и число n. Функция, найдя каждую n подстроку, равную strSub, переписывает символы этой подстроки в обратном порядке. Функция возвращает через возвращаемое значение адрес строки str, если удалось выполнить хотя бы одно преобразование в строке, в противном случае функция возвращает 0. Используйте при разработке алгоритма функции функции findPstr и replaceNSymb.
Программа, вводит строку str, число n и используя функцию replaceSubStr, в каждом из N введенных слов, ищет заданную пользователем n подстроку, равную строке str и зеркально переворачивает каждую такую найденную n подстроку. На экран выводятся только преобразованные слова, подсчитывается сколько слов из N введенных не подверглись преобразованию и не были выведены на экран.
В двух вариантах выполнить только функции findPstr и replaceNSymb.
Задача 7.23
Функция void delNsymbl(char* str, int n) получает строку, число n и удаляет из строки первые n символов.
Функция char* FirstPstrS1S2(char* str, char s1, char s2, int& lenPstr) получает строку str, символ s1 и символ s2 и ищет в строке str первую подстроку от символа s1 до символа s2. Если такая подстрока найдена, то функция через возвращаемое значение возвращает адрес этой подстроки и через параметр по ссылке ее длину, в противном случае функция возвращает 0.
Функция char* changeStr(char* str, char s1, char s2) получает строку str, символ s1 и символ s2 и ищет в строке str все подстроки, от символа s1 до символа s2 и в каждой из них проверяет наличие цифрового символа. Если он найден, то часть подстроки от первого найденного в ней цифрового символа до ее конца (включая символ s2) удаляется. Функция возвращает через возвращаемое значение адрес строки, если удалось удалить хотя бы один символ, в противном случае возвращает 0. Используйте при разработке алгоритма функции функции delNsymbl и FirstPstrS1S2.
Программа, вводит символы s1 и s2 и, используя функцию changeStr, в каждой из n введенных строк, ищет все подстроки, от символа s1 до символа s2 и осуществляет преобразование по правилу этой функции. На экран выводятся только те из введенных строк, которые подверглись изменению. Подсчитывается, сколько из введенных строк не подверглись преобразованию.
В двух вариантах выполнить только функции delNsymbl и FirstPstrS1S2.
Задача 7.24
Функция int isNumber(char symb) получает символ и определяет, является ли он цифровым символом.
Функция char* poiskNumberPstr(char* str, int& len) получает строку и находит в ней первую цифровую подстроку и возвращает ее адрес через возвращаемое значение и через параметр по ссылке ее длину. Если такая подстрока не найдена, то функция возвращает 0.
Функция void delNsymbl(char* str, int n) получает строку, число n и удаляет из строки первые n символов.
Функция void vstavkaPstr(char* str, char* pstr) получает строки str и pstr и вставляет строку pstr в начало строки str.
Функция char* zamenaNumber(char* str, char* pstr) получает строки str и pstr, ищет в строке str все цифровые подстроки и заменяет каждую из них на строку pstr. Функция возвращает через возвращаемое значение адрес строки str, если произошла хотя одна замена, в противном случае функция возвращает адресный 0. Используйте при разработке алгоритма функции функции poiskNumberPstr, delNsymbl и vstavkaPstr.
Программа вводит строку и для каждой из строк производит замену буквенных подстрок на подстроки, равные строке. Программа подсчитывает количество строк, подвергшихся изменению.
В двух вариантах выполнить только функции poiskNumberPstr и vstavkaPstr.
Задача 7.25
Функция int isBukvSymb(char symb) получает символ и определяет, является ли он буквенным символом.
Функция char* poiskFirstBukvPstr(char* str, int& len) получает строку и находит в ней первую буквенную подстроку и возвращает ее адрес через возвращаемое значение и через параметр по ссылке ее длину. Если такая подстрока не найдена, то функция возвращает 0.
Функция void delNFirstSymbl(char* str, int n) получает строку, число n и удаляет из строки первые n символов.
Функция void insertNFirstSymbl(char* str, char symb, int n) получает строку, символ symb число n и вставляет в начало строки n символов symb.
Функция char* vstavkaSymbPosleBukv(char* str, char symb) в строке ищет все буквенные подстроки и после каждой четной подстроки вставляет полученный через параметры символ, каждую нечетную подстроку удаляет. Функция возвращает адрес строки, если удалось изменить строку, в противном случае 0 . Используйте при разработке алгоритма функции функции poiskFirstBukvPstr, delNFirstSymbl, insertNFirstSymbl.
Программа вводит символ и строки и для каждой из строк ищет все буквенные подстроки и после каждой четной подстроки вставляет полученный через параметры символ, каждую нечетную подстроку удаляет.. Программа подсчитывает количество строк, подвергшихся изменению.
В двух вариантах выполнить только функции insertNFirstSymbl, poiskFirstBukvPstr.
Задача 7.26
Функция char* findPstrSymb1toSymb2(char* str,char symb1, char symb2, int& len) получает строку и находит в ней первую подстроку от symb1 до symb2, возвращает ее адрес через возвращаемое значение и через параметр по ссылке ее длину. Если такая подстрока не найдена, то функция возвращает 0.
Функция char* poiskMySymb(char* str, int len, char symb) получает строку, находит среди первых ее len символов символ symb и возвращает его адрес через возвращаемое значение. Если символ не найден, то функция возвращает адресный 0.
Функция void insertOneSymb(char* str, char symb) получает строку, символ symb и вставляет его в начало строки.
Функция char* zamenaZifrSymb(char* str, char s1, char s2, char zifr) получает строку str, символ s1 и символ s2 и ищет в строке все подстроки, от символа s1 до символа s2, в каждой из них проверяет наличие цифрового символа zifr. Если в подстроке цифра найдена, то она заменяется двумя символами s1, s2. Функция возвращает через возвращаемое значение адрес строки, если удалось вставить символы хотя бы один раз, в противном случае возвращает 0. Используйте при разработке алгоритма функции функции findPstrSymb1toSymb2, poiskMySymb, insertOneSymb.
Программа вводит два любых символа, символ-цифру и строки и для каждой из строк ищет все подстроки от первого символа до второго символа, проверяет наличие в найденной подстроке введенного цифрового символа. Если в подстроке цифра найдена, то она заменяется двумя первыми символами. Программа подсчитывает количество строк, подвергшихся изменению. Осуществить контроль ввода символа-цифры.
В двух вариантах выполнить только функции insertOneSymb, findPstrSymb1toSymb2.
Задача 7.27
Функция int isLatin (char s) получает символ и определяет, является ли он символом латиницы (строчной или прописной буквой латинского алфавита).
Функция char* isPstrAlfabit (char* str, int& n) получает строку str и ищет в ней первую подстроку, содержащую только символы латиницы (строчные или прописные буквы латинского алфавита). Если такая подстрока найдена, функция возвращает через параметр по ссылке длину подстроки и ее адрес через возвращаемое значение, и 0 в противном случае. Используйте при разработке алгоритма функции функцию isLatin.
Функция int UpDown (char& s) получает через параметр по ссылке символьный объект, преобразует в нем, если это прописной буквенный символ в символ строчный и возвращает через возвращаемое значение 1, если преобразование сделано, и 0 в противном случае.
Функция char* UpDownNPstr (char* str, int n) получает строку str и преобразует каждую n-ую подстроку латинских букв в подстроку тех же букв, но в коде верхнего регистра. Функция возвращает адрес строки str, если преобразования были осуществлены хотя бы над одной n-ой подстрокой строки str, и 0, если ни один символ в строке не был подвергнут преобразованию. Функция использует разработанные Вами функции isPstrAlfabit и UpDown.
Программа со стандартного устройства ввода считывает число n и N слов (точное количество слов пользователь задает заранее), и используя функцию UpDownNPstr преобразует слова, выдавая на экран только те из них, в которых удалось сделать преобразования.
В двух вариантах выполнить только функцию isPstrAlfabit.
Задача 7.28
Функция char* FirstРStr (char* strRez, char* str) получает две строки - строку strRez и строку str, и ищет в строке strRez первую подстроку, равную строке str, Функция возвращает через возвращаемое значение адрес найденной подстроки или ноль, если подстрока не найдена.
Функция int Lower(char& s) получает символ по ссылке и, если это буквенный символ, преобразует его код из кода верхнего регистра в код нижнего регистра. Функция через возвращаемое значение возвращает 1, если символ подвергся преобразованию и 0, если такого преобразования не было.
Функция char* LowerSymb (char* strRez, char* str) получает две строки строку str и строку strRez, и ищет в строке strRez подстроки, равные строке str, и в каждой найденной такой подстроке меняет прописную букву, если она есть, в строчную букву, оставляя без изменения остальные символы. Функция возвращает через возвращаемое значение адрес строки strRez, если символы строки подвергались преобразованию, и 0 в противном случае. Используйте при разработке алгоритма функции функцию FirstРStr и Lower.
Программа со стандартного устройства ввода считывает фразу, состоящую из N слов (точное количество слов в фразе задает пользователь заранее), и, используя функцию LowerSymb выдает на экран преобразованную фразу, в которой оставлены только слова, все символы которых подвергнуты изменению, а также сообщает о том, сколько слов из исходной фразы не включено в результирующую.
В двух вариантах выполнить только функцию FirstРStr.
Вариант 29.
Функция char* at (char* str, char s, int n, int N, int& len) получает строку символов str, символ s, числа n и N и определяет адрес и длину подстроки, начинающуюся с n-ого вхождения символа s в строке и заканчивающуюся N вхождением этого символа включительно (n<N). Если такой подстроки не существует, функция возвращает 0.
Функция char* delNsymbl (char* str, int N) удаляет из полученной строки N первых символов.
Программа получает строку, символ и два числа n и N. Используя функции at и delNsymbl, программа в полученной строке удаляет все символы между n и N вхождениями заданного символа, если таковые вхождения имеются. В противном случае выдается сообщение о невозможности сделать удаление.
В двух вариантах выполнить функции at и delNsymbl
Организовать при вводе контроль чисел n и N.
Задача 7.30 Функция char* findFirstSubstr (char* str, char* substr) получает стpоку str, строку substr и ищет в строке str подстpоки, равные строке substr. Функция возвращает адрес подстроки через возвращаемое значение, если она найдена, иначе возвращает 0.
Функция char* delNsymbl (char* str, int N) удаляет из полученной строки N первых символов.
Функция void pushSubstr(char* str, char* substr) вставляет в начало строки str строку substr.
Функция char* findHowSubstr (char* str, char* substr1, char*substr2, int how) получает стpоку str, строки substr1 и substr2, число how и ищет в строке str how-тую подстpоку, равную строке substr1, и, найдя, заменяет ее на подстроку substr2. Функция через возвращаемое значение возвращает адрес строки, если удалось сделать хоть одну замену, в противном случае функция возвращает 0. Используйте при разработке алгоритма функции функции findFirstSubstr, delNsymbl, pushSubstr.
Программа вводит с клавиатуры две строки substr1, substr2 и число how и для каждого из N введенного слова программа осуществляет поиск подстроки substr1 и замены ее на подстроку substr2. Функция выдает на экран каждое преобразованное слово. Функция подсчитывает количество не преобразованных слов.
В двух вариантах выполнить только функции findFirstSubstr,, pushSubstr.
Задача 7.31
Функция int isNumber (char s) получает символ и определяет, является ли он цифровым символом.
Функция char* isNumberPstr (char* str, int& len) получает строку str и ищет в ней первую подстроку, содержащую только цифровые символы. Если такая подстрока найдена, функция возвращает через параметр по ссылке ее длину и ее адрес через возвращаемое значение, и 0 в противном случае. Используйте при разработке алгоритма функции функцию isNumber.
Функция char* delNsymbl (char* str, int N) удаляет из полученной строки N первых символов.
Функция char* numtrim (char* str) получает строку str, в которой могут быть цифры в конце, в начале, в середине, удаляет из нее только начальные и конечные цифры. Функция через возвращаемое значение возвращает адрес str, если строку удалось преобразовать, и 0, если не удалось. Функция должна использовать разработанные функции isNumberPstr и delNsymbl.
Программа со стандартного устройства ввода считывает фразу, состоящую из N слов (точное количество слов в фразе задает пользователь заранее), и, используя функцию numtrim выдает на экран преобразованную фразу, в которой оставлены только слова, не окаймленные буквенными символами.
В двух вариантах выполнить только функции isNumberPstr и delNsymbl.
Задача 7.32
Функция void pushBeginNSymbl(char* str, char s, int n) получает строку, символ s, число n и вставляет в начало строки n символов s.
Функция void udalenNSymbl(char* str, int n) получает строку, число n и удаляет из строки первые n символов.
Функция char* vstavkaAndUdalenSymbols(char* str, char* str1) получает строку str и строку str1, ищет в строке str все подстроки, равные строке str1. Функция перед каждой найденной подстрокой вставляет два последних символа строки str, а последний символ каждой найденной подстроки удаляет. Функция через возвращаемое значение возвращает адрес строки str, если удалось ее изменить, в противном случае возвращает 0. Используйте при разработке алгоритма функции функции pushBeginNSymbl, udalenNSymbl.
Программа вводит первую строку и число N, затем последовательно N других строк. Для каждой из этих N строк ищутся все подстроки, равные первой строке. Перед каждой найденной подстрокой вставляется два последних символа самой строки, а последний символ каждой найденной подстроки удаляется. Программа подсчитывает количество строк, не подвергнутых изменению.
В двух вариантах выполнить только функции pushBeginNSymbl, udalenNSymbl.
Задача 7.33
Функция int isCifr(char symb) получает символ и определяет, является ли он цифровым символом.
Функция char* poiskCifrPstr(char* str, int& len) получает строку, находит в ней первую цифровую подстроку и возвращает ее адрес через возвращаемое значение, а через параметр по ссылке ее длину. Если такая подстрока не найдена, то функция возвращает 0.
Функция void delNsymbl(char* str, int n) получает строку, число n и удаляет из строки первые n символов.
Функция void insertNsymbl(char* str, char symb, int n) получает строку, символ symb число n и вставляет в начало строки n символов symb.
Функция char* long(char* str, char symb) получает строку str, в которой могут присутствовать цифровые подстроки, и символ symb. Функция находит цифровые подстроки и заменяет каждую цифровую подстроку S символами symb. S вычисляется как сумма цифр в подстроке, которая подлежит замене. Если цифровые подстроки в строке str не найдены, то возвращается 0, в противном случае функция возвращает через возвращаемое значение адрес преобразованной строки str. Используйте при разработке алгоритма функции функции poiskCifrPstr, delNsymbl, insertNsymbl.
Программа со стандартного устройства ввода считывает фразу, состоящую из N слов (точное количество слов в фразе задает пользователь заранее), и выдает на экран преобразованную фразу, в которой каждое введенное слово, содержащее цифровые подстроки, «растянуты» с помощью функции long по следующему правилу. Слова, содержащие четное число символов, «растянуты» первым символом слова, а слова, содержащие нечетное число символов, «растянуты» вторым символом слова Программа подсчитывает количество не преобразованных слов в исходной фразе.
В двух вариантах выполнить только функции poiskCifrPstr, insertNsymbl.