Содержание
ВНИМАНИЕ | Для получения программы своего варианта пишите на наш электронный адрес proglabs@mail.ru |
Цель лабораторной работы
Разработка программ на языке С++ для обработки строк.
Задание №1 («Найти и заменить»)
Варианты заданий
➡ В задании можно заменить русские слова на английские или сделать транслитерацию русских слов
№ | Условие |
1 | Пользователь вводит текст. Вычислить количество слов начинающихся на $<м>$. Количество слов $<Компьютер>$ или $<компьютер>$, а также количество предложений. |
2 | Пользователь вводит текст. Заменить в тексте слова $<ПК>$ на $<компьютер>$, подсчитав их количество. |
3 | Пользователь вводит текст. Вывести исходный текст, заменив в нем слово $<Иванов\ И.И.>$ на $<Сидоров\ А.А.>$. Заменить круглые скобки на фигурные, подсчитав их количество. |
4 | Пользователь вводит текст. Вывести исходный текст, заменив в нем слово $<Pascal>$ на $<C++>$, подсчитав их количество. Вычислить количество слов $<компьютер>$. |
5 | Пользователь вводит текст. Вывести исходный текст, заменив в нем слово $<плохо>$ на $<хорошо>$. Вычислить количество всех слов. |
6 | Пользователь вводит текст. Вычислить количество слов начинающихся на $<A>$. Количество слов $<мало>$ или $<Мало>$. Заменить в тексте слова $<доллар>$ на $<рубль>$. |
7 | Пользователь вводит текст. Заменить в тексте слова $<Максимальный>$ на $<Наибольший>$. Удалить все слова $<Иванов\ И.И.>$. Вычислить количество предложений. |
8 | Пользователь вводит текст. Заменить в тексте слова $<кризис>$ на $<проблема>$, подсчитав их количество. Удалить все слова $<компьютер>$. |
9 | Пользователь вводит текст. Вывести исходный текст, заменив в нем квадратные скобки на круглые. Вычислить количество всех слов и количество появления слова $<обучаемый>$. |
10 | Пользователь вводит текст. Вывести исходный текст, заменив в нем слово $<проблема>$ на $<задача>$. Удалить все слова $<Иванов\ И.И.>$. |
11 | Пользователь вводит текст. Вывести исходный текст, заменив в нем слово $<три>$ на $<удовлетворительно>$. Вычислить количество слов начинающихся на $<к>$. |
12 | Пользователь вводит текст. Вывести исходный текст, заменив в нем слово $<дублирование>$ на $<копирование>$. Вычислить количество всех слов. |
13 | Пользователь вводит текст. Вывести исходный текст, заменив в нем слово $<четыре>$ на $<хорошо>$. Вычислить количество всех слов и предложений. Заменить все скобки на пробелы. |
14 | Пользователь вводит текст. Вывести исходный текст, заменив в нем слово $<Pascal>$ на $<C++>$. Удалить символы $<*>$. Заменить все цифры на пробелы. |
15 | Пользователь вводит текст. Вывести исходный текст, заменив в нем слово $<дублирование>$ на $<копирование>$. Вычислить количество всех слов. |
Образец выполнения (вариант №8)
Условие задачи
Пользователь вводит текст. Заменить в тексте слова «krizis» на «problema«, подсчитав их количество. Удалить все слова «komputer«.
💡 Вместо русских слов будет использована транслитерация
Реализация задачи на языке С++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | #include <iostream> // для консольного ввода-вывода #include <string> // для переменных типа данных string using namespace std; // главная функция программы (точка входа) int main( void ) { // русификация всех диалогов программы setlocale( LC_ALL, "" ); // хранит текст, введенный с клавиатуры string text; // предлагаем пользователю ввести с клавиатуры текст cout << "Введите входной текст для обработки: "; getline( cin, text ); // определяем константы, отвечающие за искомое и заменяющее слова const string KRIZIS = "krizis"; // то слово, которое заменяется const string PROBLEMA = "problema"; // то слово, на которое заменяется size_t index_find_word = text.find( KRIZIS ); // индекс символа, с которого встречается самое левое искомое слово // пока в исходном тексте не все замены проведены while( index_find_word < text.size() ) { // удаляем из входного текста самое первое (левое) слово "krizis" text.erase( index_find_word, KRIZIS.size() ); // вставляем вместо удаленного слова "krizis" слово "problema" text.insert( index_find_word, PROBLEMA ); // попытка найти очередное слово "krizis" во входном тексте index_find_word = text.find( KRIZIS ); } // определяем константу, отвечающую за удаляемое слово "komputer" const string KOMPUTER = "komputer"; // удаляем из текста все слова "komputer" index_find_word = text.find( KOMPUTER ); // пока в тексте есть вхождения слова "komputer" while( index_find_word < text.size() ) { // удаляем самое левое вхождение слова "komputer" text.erase( index_find_word, KOMPUTER.size() ); // попытка найти очередное слово "komputer" в тексте index_find_word = text.find( KOMPUTER ); } // выводим результат на экран cout << "Текст после обработки: " << text; // задержка работы программы, чтобы у пользователя была возможность просмотреть результат fflush(stdin); cout << endl << endl << "Для завершения работы программы нажмите ENTER..."; cin.get(); // завершение выполнение программы и передача управления в ОС (код 0 - все прошло успешно!) return 0; } |
Результаты работы программы
ВНИМАНИЕ | Для получения программы своего варианта пишите на наш электронный адрес proglabs@mail.ru |
Задание №2 («Исправление ошибок в тексте»)
Варианты заданий
➡ В программах не использовать find
№ | Условие |
1 | Исходный текст набран с ошибками: иногда отсутствуют пробелы после точек. Вставить $1$ пробел после каждой точки, если он отсутствует перед следующим предложением. А также вычислить количество слов и предложений. |
2 | Исходный текст набран с ошибками. Вывести исходный текст, заменив в нем строчные (малые) буквы, следующие за точкой и произвольным количеством пробелов на прописные (большие) буквы. В исходном тексте может быть много предложений и точек. А также вычислить количество слов и предложений. |
3 | В тексте заменить цифры на их словесные названия (использовать Case). |
4 | Исходный текст набран с ошибками: между некоторыми словами по несколько пробелов. Заменить в тексте подряд идущие пробелы одним пробелом. |
5 | В тексте заменить символы арифметических операций ($+\ -\ *\ /$) на их словесные названия (использовать Case). |
6 | Исходный текст набран с ошибками: после слова может находиться один или более пробелов перед точкой (или нет). Вывести исходный текст, убрав в нем эти пробелы перед точкой (между словом и точкой). В исходном тексте может быть много предложений и точек. А также удалить символы $\#$. |
7 | Исходный текст набран с ошибками. Вывести исходный текст, заменив в нем строчные (малые) буквы, следующие за точкой и одним пробелом на прописные (большие) буквы. В исходном тексте может быть много предложений и точек. Вычислить количество слов, начинающихся на букву $<A>$. |
8 | Пользователь вводит текст на русском языке. Вывести исходный текст, заменив в нем все заглавные буквы (прописные/большие) буквы на строчные (малые). Вычислить количество слов, а также количество предложений. А также удалить символы $@$. |
9 | Исходный текст набран с ошибками: выражения, заключенные в скобки имеют один пробел вначале и в конце. Вывести исходный текст, убрав в нем пробелы после открывающейся скобки, а также перед закрывающейся скобкой. В исходном тексте может быть много выражений, заключенных в скобки. |
10 | Исходный текст набран с ошибками. Вывести исходный текст, заменив в нем строчные (малые) буквы, следующие за точкой и произвольным количеством пробелов на прописные (большие) буквы. В исходном тексте может быть много предложений и точек. А также вычислить количество слов «ПК». |
11 | Исходный текст набран с ошибками: после слова может находиться один или более пробелов перед запятой (или нет). Вывести исходный текст, убрав в нем пробелы перед запятой (между словом и запятой). В исходном тексте может быть много предложений и запятых. А также удалить символы $-$. |
12 | Исходный текст набран с ошибками: Выражения, заключенные в скобки имеют один или более пробелов вначале и в конце (или нет). Вывести исходный текст, убрав в нем пробелы после открывающейся скобки, а также перед закрывающейся скобкой . В исходном тексте может быть много выражений заключенных в скобки. |
13 | Исходный текст набран с ошибками: после слова может находиться один пробел перед запятой или нет. Убрать в тексте эти пробелы перед запятой (между словом и запятой). В исходном тексте может быть много предложений и запятых. А также удалить символы $\$$. |
14 | Исходный текст набран с ошибками: некоторые слова по ошибке начинаются не с одной первой заглавной буквы, а с двух заглавных букв. Исправить текст. |
15 | Исходный текст набран с ошибками: иногда отсутствуют пробелы после запятых. Вставить $1$ пробел после каждой запятой, если он отсутствует перед следующим словом. А также вычислить количество слов «Информатика». |
16 | Исходный текст набран с ошибками: иногда отсутствуют пробелы после точек. Вставить $1$ пробел после каждой точки, если он отсутствует перед следующим предложением. а также вычислить количество предложений. А также удалить квадратные скобки. |
Образец выполнения (вариант №5)
Условие задачи
В тексте заменить символы арифметических операций ($+\ -\ *\ /$) на их словесные названия (использовать Case).
Реализация задачи на языке С++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | #include <iostream> // для консольного ввода-вывода #include <string> // для переменных типа данных string using namespace std; // главная функция программы (точка входа) int main( void ) { // русификация всех диалогов программы setlocale( LC_ALL, "" ); // хранит текст, введенный с клавиатуры string text; // предлагаем пользователю ввести с клавиатуры текст cout << "Введите входной текст для обработки: "; getline( cin, text ); // определяем константы, отвечающие за символ арифметической операции const char PLUS = '+'; const char MINUS = '-'; const char MULTY = '*'; const char DIVIDE = '/'; // определяем константы, отвечающие за словесные названия арифметических операций const string WORD_PLUS = "ПЛЮС"; const string WORD_MINUS = "МИНУС"; const string WORD_MULTY = "УМНОЖИТЬ"; const string WORD_DIVIDE = "РАЗДЕЛИТЬ"; // отвечает за индекс текущего символа входного текста int i = 0; while( i < text.size() ) // пока не все символы входного текста обработаны { // анализируем текущий символ текста switch ( text[ i ] ) { case PLUS: // если это знак +, то удаляем его и вставляем вместо него слово "ПЛЮС" { text.erase( i, 1 ); text.insert( i, WORD_PLUS ); i += WORD_PLUS.length() - 1; break; } case MINUS: // если это знак -, то удаляем его и вставляем вместо него слово "МИНУС" { text.erase( i, 1 ); text.insert( i, WORD_MINUS); i += WORD_MINUS.size() - 1; break; } case MULTY: // если это знак *, то удаляем его и вставляем вместо него слово "УМНОЖИТЬ" { text.erase( i, 1 ); text.insert( i, WORD_MULTY); i += WORD_MULTY.size() - 1; break; } case DIVIDE: // если это знак /, то удаляем его и вставляем вместо него слово "РАЗДЕЛИТЬ" { text.erase( i, 1 ); text.insert( i, WORD_DIVIDE); i += WORD_DIVIDE.size() - 1; break; } } // переходим на обработку следущего символа входного текста i++; } // выводим обработанный текст на экран cout << endl << "После обработки текст имеет вид: " << text << endl; // задержка работы программы, чтобы у пользователя была возможность просмотреть результат fflush(stdin); cout << endl << endl << "Для завершения работы программы нажмите ENTER..."; cin.get(); // завершение выполнение программы и передача управления в ОС (код 0 - все прошло успешно!) return 0; } |
Результаты работы программы
ВНИМАНИЕ | Для получения программы своего варианта пишите на наш электронный адрес proglabs@mail.ru |
Задание №3 («Сортировка строк»)
Варианты заданий
№ | Условие |
1 | Дана строка текста. Упорядочить по возрастанию символы, расположенные между первым элементом равным $?$ и последним элементом равным $!$. Предварительно найти, где они находятся. |
2 | Дана строка текста. Известно, что в ней есть один символ $\&$, найти где он находится и отсортировать по возрастанию символы в строке, расположенные за ним. |
3 | Дана строка текста. Известно, что в ней есть один элемент равный $<a>$, найти где он находится и упорядочить по алфавиту элементы, расположенные за этим элементом $<a>$. |
4 | Дана строка текста. Известно, что в ней есть один символ $*$, найти где он находится и отсортировать по возрастанию элементы массива, расположенные перед ним. |
5 | Дана строка текста. Найти позицию, где находиться последняя точка. Упорядочить по возрастанию символы массива расположенные перед этой точкой. |
6 | Дана строка текста. Отсортировать последние 7 символов в строке по алфавиту (или по таблице ASCII). |
7 | Дана строка текста (цифры и буквы). Известно, что в ней есть единственная цифра. Найти номер позиции, где находится цифра. Далее отсортировать буквы по алфавиту, которые расположены после этой цифры. |
8 | Дана строка текста. Известно, что в ней есть цифры и буквы. Переписать в другую строку только цифры и затем отсортировать ее по возрастанию. |
9 | Дана строка текста. Известно, что в ней есть один элемент равный $*$ и один элемент равный $\#$. Найти где они находятся, и упорядочить по алфавиту символы, расположенные между ними. |
10 | Дана строка текста. Известно, что в строке есть только две точки. Найти их порядковые номера. Далее упорядочить по возрастанию символы, расположенные между ними. |
11 | Дана строка текста. Найти номер первого элемента равного $+$. Упорядочить по убыванию элементы массива расположенные за этим элементом. |
12 | Дана строка текста. Отсортировать символы по алфавиту с $4$ позиции по $15$ позицию в строке. |
13 | Дана строка текста. Известно, что в ней есть только буквы (прописные и срочные). Переписать во вторую строку только заглавные (прописные) буквы, и затем отсортировать их по алфавиту. |
14 | Даны две строки текста. Объединить их, записав обе строки в третью строку (неважно в каком порядке). Затем отсортировать третью строку по алфавиту (или по таблице ASCII). |
15 | Дана строка текста. Отсортировать первые $7$ символов в строке по алфавиту (или по таблице ASCII). |
Образец выполнения (вариант №1)
Условие задачи
Дана строка текста. Упорядочить по возрастанию символы, расположенные между первым элементом равным $?$ и последним элементом равным $!$. Предварительно найти, где они находятся.
Реализация задачи на языке С++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | #include <iostream> // для консольного ввода-вывода #include <string> // для переменных типа данных string #include <algorithm> // для сортировки символов в рамках строки sort using namespace std; // главная функция программы (точка входа) int main( void ) { // русификация всех диалогов программы setlocale( LC_ALL, "" ); // хранит текст, введенный с клавиатуры string text; // предлагаем пользователю ввести с клавиатуры текст cout << "Введите входной текст для обработки: "; getline( cin, text ); // определяем константы, отвечающие за первый и последний символы const char FIRST = '?'; const char LAST = '!'; int first_index; // индекс, где стоит символ ? int last_index; // индекс, где стоит символ ! // пробуем найти в заданном тексте первый элемент равный ? first_index = text.find_first_of( FIRST ); // пробуем найти в заданном тексте последний элемент равный ! last_index = text.find_last_of( LAST ); // надо убедиться, что эти символы были найдены, иначе сортировка невозможна! if( ( first_index == -1 ) || ( last_index == -1 ) ) cout << endl << "В заданном тексте не обнаружены символы ? или !. Обработка входного текста невозможна!" << endl; else { // возможна ситуация, что символ ! встречается раньше символа ?, в этом случае меняем их местами (например "hello!stop?machine") if( first_index > last_index ) swap( first_index, last_index ); // сортируем символы на интервале ( first_index, last_index ) sort( text.begin() + first_index + 1, text.begin() + last_index ); // выводим обработанный текст на экран cout << "После обработки текст имеет вид: " << text << endl; } // задержка работы программы, чтобы у пользователя была возможность просмотреть результат fflush(stdin); cout << endl << endl << "Для завершения работы программы нажмите ENTER..."; cin.get(); // завершение выполнение программы и передача управления в ОС (код 0 - все прошло успешно!) return 0; } |
Результаты работы программы
ВНИМАНИЕ | Для получения программы своего варианта пишите на наш электронный адрес proglabs@mail.ru |
Задание №4 («Сравнение строк»)
Варианты заданий
№ | Условие |
1 | Даны две строки текста. Определить сколько раз встречается каждый символ первой строки во второй строке. Например: Пусть исходная строка Str1 := “xyz”; Str2: “x a d c x y x w” . Тогда “х” – встречается 3 раза “y”— встречается 1 раз, “z”— встречается 0 раз. |
2 | Определить, можно ли путем перестановок символов в строке S1 получить строку S2. Считать, что обе строки одной длинны. Далее удалить все слова «неудача». |
3 | Дана строка текста. Определить сколько раз встречается каждый символ в строке. Например: Пусть исходная строка Str: “xwxyxw” . Тогда “х” – встречается 3 раза “y”— встречается 1 раз, “w”— встречается 2 разa. Далее удалить все слова «проблема». |
4 | Даны две строки текста. Определить сколько раз встречается каждый символ первой строки во второй строке. Например: Str1 : “xyz”; Str2: “x a d c x y x w” . Тогда “х” – встречается 3 раза “y”— встречается 1 раз, “z” — встречается 0 раз. Далее заменить все слова «компьютер» на слова «ПК» . |
5 | Определить, можно ли путем перестановок символов в строке S1 получить строку S2. Считать, что обе строки одной длинны. Далее вычислить количество пробелов во второй строке. Далее заменить все слова «уникальный» на слова «единственный» . |
6 | Даны две строки текста. Определить встречается ли хотя бы один раз каждый из символов первой строки во второй строке. Например: Пусть исходная строка Str1 : “xyz”; Str2: “x a d c x y xw” . Тогда “х” – встречается 3 раза “y”— встречается 1 раз, “z”— встречается 0 раз. Не каждый символ встречается , например “z” не встречается ни разу. |
7 | Дана строка текста. Определить сколько раз встречается каждый символ в строке. Например: Пусть исходная строка Str: “x w x y x w” . Тогда “х” – встречается 3 раза “y”— встречается 1 раз, “w”— встречается 2 разa. Далее вычислить количество пробелов в строке. |
8 | Определить, можно ли путем перестановок символов в строке S1 получить строку S2. Считать, что обе строки одной длинны. Далее вычислить количество пробелов во второй строке. |
9 | Дана строка текста. Определить сколько раз встречается каждый символ в строке. Например: Пусть исходная строка Str: “x w x y x w” . Тогда “х” – встречается 3 раза “y”— встречается 1 раз, “w”— встречается 2 разa. |
10 | Определить, можно ли путем перестановок символов в строке S1 получить строку S2. Считать, что обе строки одной длины. |
11 | Даны две строки текста. Определить встречается ли хотя бы один раз каждый из символов первой строки во второй строке. Например: Пусть исходная строка Str1 : “xyz”; Str2: “x a d c x y xw” . Тогда “х” – встречается 3 раза “y”— встречается 1 раз, “z”— встречается 0 раз. Не каждый символ встречается, например, “z” не встречается ни разу. Далее вычислить количество символов «а» в первой строке. |
12 | Даны две строки текста. Определить сколько раз встречается каждый символ первой строки во второй строке. Например: Пусть исходная строка Str1 : “xyz”; Str2: “x a d c x y x w” . Тогда “х” – встречается 3 раза “y”— встречается 1 раз, “z”— встречается 0 раз . Далее удалить все слова «кризис». |
13 | Даны две строки текста. Определить встречается ли хотя бы один раз каждый из символов первой строки во второй строке. Например: Пусть исходная строка Str1 : “xyz”; Str2: “x a d c x y xw” . Тогда “х” – встречается 3 раза “y”— встречается 1 раз, “z”— встречается 0 раз. Не каждый символ встречается , например “z” не встречается ни разу. Далее удалить все слова «разрушение» в первой строке. |
14 | Даны две строки текста. Определить сколько раз встречается каждый символ первой строки во второй строке. Например: Пусть исходная строка Str1 : “xyz”; Str2: “x a d c x y x w” . Тогда “х” – встречается 3 раза “y” — встречается 1 раз, “z”— встречается 0 раз. Далее вычислить количество пробелов во второй строке. |
15 | Дана строка текста. Определить сколько раз встречается каждый символ в строке. Например: Str: “xwxyxw” . Тогда “х” – встречается 3 раза “y”— встречается 1 раз, “w”— встречается 2 разa. Далее заменить все слова «уникальный» на слова «единственный» . |
16 | Даны две строки текста. Определить встречается ли хотя бы один раз каждый из символов первой строки во второй строке. Например: Пусть исходная строка Str1 : “xyz”; Str2: “x a d c x y xw” . Тогда “х” – встречается 3 раза “y”— встречается 1 раз, “z”— встречается 0 раз. Не каждый символ встречается , например “z” не встречается ни разу. Далее заменить все слова «компьютер» на слова «ПК» . |
Образец выполнения (вариант №10)
Условие задачи
Определить, можно ли путем перестановок символов в строке S1 получить строку S2. Считать, что обе строки одной длины.
Реализация задачи на языке С++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | #include <iostream> // для консольного ввода-вывода #include <string> // для переменных типа данных string #include <algorithm> // для сортировки символов в рамках строки sort using namespace std; // главная функция программы (точка входа) int main( void ) { // русификация всех диалогов программы setlocale( LC_ALL, "" ); // значения строк, введенных с клавиатуры string S1, S2; // предлагаем пользователю ввести с клавиатуры строку S1 cout << "Введите строку S1: "; getline( cin, S1 ); // предлагаем пользователю ввести с клавиатуры строку S2 cout << "Введите строку S2: "; getline( cin, S2 ); // сортируем символы внутри каждой строки sort( S1.begin(), S1.end() ); sort( S2.begin(), S2.end() ); // сравниваем отсортированные символы в строках и выводим результат на экран if( S1 == S2 ) cout << endl << "Да, переставляя символы строки S1, можно получить строку S2." << endl; else cout << endl << "Нет, переставляя символы строки S1, нельзя получить строку S2." << endl; // задержка работы программы, чтобы у пользователя была возможность просмотреть результат fflush( stdin ); cout << endl << endl << "Для завершения работы программы нажмите ENTER..."; cin.get(); // завершение выполнение программы и передача управления в ОС (код 0 - все прошло успешно!) return 0; } |
Результаты работы программы
ВНИМАНИЕ | Для получения программы своего варианта пишите на наш электронный адрес proglabs@mail.ru |
Добавить комментарий