- •Методические указания к лабораторным работам по дисциплине «программирование»
- •Часть 1
- •Введение
- •Содержание отчетов
- •Варианты индивидуальных заданий
- •Подготовка к лабораторным работам
- •Лабораторная работа № 1. Алгоритмизация линейных вычислительных процессов.
- •Лабораторная работа № 2. Алгоритмизация разветвляющихся вычислительных процессов.
- •Лабораторная работа № 3. Алгоритмизация циклических вычислительных процессов.
- •Лабораторная работа № 4. Программирование вложенных циклов и матричных задач
- •Лабораторная работа № 5. Алгоритмизация задач обработки символьной информации
- •Приложение 2
- •Библиографический список
- •Оглавление
- •Часть 1
- •600000, Владимир, ул. Горького, 87.
Лабораторная работа № 5. Алгоритмизация задач обработки символьной информации
1. Цель работы
Изучение строкового типа данных и принципов его обработки. Изучение принципов алгоритмизации задач, связанных с обработкой символьной информации.
2. Порядок выполнения работы
-
Изучить особенности объявления, обработки и представления в памяти ЭВМ символьного типа данных. Изучить определение пользовательского типа данных (typedef).
-
Изучить типы char и string, особенности их использования, изучить отличия символьной и строковой константы (к последней всегда добавляется нулевой байт).
-
Изучить работу с функциями библиотеки string.h: strlen, strupr, strchr, strlwr, strcat, strcpy, strcmp memset; библиотеки ctype.h: isdigit, isalnum, isalpha, tolower, toupper.
-
Изучить пример выполнения задания. Обратите внимание, что значение строковой переменной всегда должно заканчиваться нулевым байтом.
-
Разработать алгоритм решения индивидуального задания, удовлетворяющий требованиям из пункта 2.6, используя метод пошаговой детализации.
-
Требования к алгоритму. Алгоритм должен соответствовать требованиям структурного подхода. Необходимо организовать интерфейс ввода – вывода всех требуемых данных, организовать проверку входных данных на допустимые значения. Для решения задачи использовать символьный массив и указатель на строку. Предусмотреть инициализацию массива и строк на выбор пользователя ручным способом или с помощью строковых констант. Использовать объявление символьного массива с предварительным заданием типа.
-
Разработать программу на языке С++ для алгоритма п. 2.5.
-
Выполнить отладку и компиляцию программы, получить исполняемый файл.
-
Выполнить тестирование программы несколькими наборами входных данных.
3. Пример выполнения задания
Даны символы s1, s2 … Известно, что символ s1 отличен от пробела и что среди s2, s3 … имеется хотя бы один пробел. Рассматриваются s1, … , sn - символы, предшествующие первому пробелу (n заранее неизвестно). Преобразовать последовательность s1, … , sn, удалив все символы, не являющиеся буквами или цифрами, и заменив каждую большую букву одноименной малой.
3.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 |
// модуль lab5.cpp
#include "stdafx.h" #include <Windows.h>
typedef char string_user[100]; //пользовательский тип строка из 99 символов //(в последний компилятор записывает 0, для обозначения конца строки) using namespace std; //область видимости для встроенного типа //string из библиотеки string.h int main() { setlocale(LC_ALL, "RUS"); //char st1[100]; // вариант объявления символьного массива из 99 символов // инициализация строковой константой---------------------------------------------- string_user st1("Ис2х!од)(ны:й тЕКСт 2: abcDF1+2=3!!!");
//или ввод исходной строки пользователем----------------------------------------------- printf("Введите последовательность символов - строку: \n"); std::cin.getline(st1, 99); printf("\n"); //проверка на допустимость входных данных while ((strlen(st1)==0) || (st1[0]==' ') || strchr(st1, ' ')==NULL) //strchr(st1, ' '); { printf("Повторите ввод, первый символ не должен быть пробелом\n"); std::cin.getline(st1, 99); printf("\n"); } OemToAnsi(st1, st1); //преобразует введенные данные в символьный набор
cout << "#Исходная последовательность символов" << endl; cout << st1 <<endl; //поиск первого пробела----------------------------------------------------------------------- int n = 0; //переменная для сохранения позиции пробела char buf[100] = ""; for (n = 0; st3[n] != ' '; n++); //удаляем все символы, кроме букв и цифр---------------------------------------------- memset (buf, 0, 100); //очищаем строку, заполняя все символы нулями j = 0; for (int i = 0; i < n; i++) // для русского алфавита (маленькие и большие буквы) if (((int(st1[i]) >= -64)&&(int(st1[i]) <= -1)) || //добавляем английский алфавит ((int(st1[i]) >= 65 &&int(st1[i]) <= 90)||(int(st1[i]) >= 97 && st1[i] <= 122)) //добавляем цифры ||((int(st1[i]) >= 48 && int(st1[i]) <= 57))) buf[j++] = st1[i]; strcpy(st1, buf); //преобразуем большие буквы в маленькие (приводим к нижнему регистру)----- char * pst3 = strlwr(buf); cout << "#Преобразованная последовательность символов " << endl; cout << pst3 << endl;
system("pause"); return 0; } |
4. Контрольные вопросы
1. Какие существуют способы организации символьных данных?
2. Объявление и инициализация символьных массивов.
3. В чем отличие символьной и строковой константы?
4. Как хранится строковое значение в памяти ЭВМ?
5. Общие принципы работы с символьными данными.
6. Библиотеки и функции для работы со строками.
7. Какие возможны операции над строками?