МУ_ЛР4_ОП (Методические указания к лабораторным работам), страница 3

2018-01-11СтудИзба

Описание файла

Файл "МУ_ЛР4_ОП" внутри архива находится в папке "Методические указания к лабораторным работам". Документ из архива "Методические указания к лабораторным работам", который расположен в категории "". Всё это находится в предмете "программирование на основе классов и шаблонов" из 2 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "программирование на основе классов и шаблонов" в общих файлах.

Онлайн просмотр документа "МУ_ЛР4_ОП"

Текст 3 страницы из документа "МУ_ЛР4_ОП"

char * pStrMas =(char *) calloc (Razm , sizeof(char) * 20); // 20 одна строка

printf ("\nВведите строки массива [%d]: \n" , Razm );

for (int i =0 ; i < Razm ; i++ )

// scanf ("%s", pStrMas + i * 20);

scanf ("%s", &pStrMas[ i * 20]);

// Распечатка

for (int i =0 ; i < Razm ; i++ )

//printf ("Строки массива % d - %s\n", i , pStrMas + i * 20);

printf ("Строки массива % d - %s\n", i , &pStrMas[ i * 20] );

///////////////////////////

// Слияние массива в отдельную строку

int nMasSize = 200;

char * pBigString = (char *) malloc( nMasSize + 2 + Razm ); // Пробелы воск. знак и нуль

pBigString[0] = '\0';

for (int i =0 ; i < Razm ; i++ )

{ strcat( pBigString , &pStrMas[ i * 20]);

strcat( pBigString , " ");

};

strcat( pBigString , "!");

printf ("Большая строка - %s \n" , pBigString);

free (pBigString);

Результат получим такой:

Введите размер массива строк:

4

Введите строки массива [4]:

Студенты

могут

хорошо

учиться

Строки массива 0 - Студенты

Строки массива 1 - могут

Строки массива 2 - хорошо

Строки массива 3 - учиться

Большая строка - Студенты могут хорошо учиться !

15 Библиотеки функций и классы для строк

В системах программирования предусматривается много библиотек для функций различного назначения (например, для работы со строками, выполнения ввода и вывода, работы с массивами и т.д.). Эти библиотеки подключаются с помощью заголовочных файлов или пространств описаний (пространств имен в С++ - namespace). Кроме заголовочных файлов для использования библиотек подключаются специальные модули (иногда они подключаются автоматически), содержащие описания функций ( *.lib или *.dll). Пример подключения библиотек ввода/вывода и библиотек для работы с математическими и системными функциями:

#include <math.h> // Математическая библиотека функций

#include <process.h> // Системная библиотека функций

#include <string.h> // библиотека функций для работы со строками

#include <stdlib.h> // Стандартная библиотека разных функций

#include <locale.h> // библиотека локализации программ

Стандартных библиотек и классов для описания строк очень много. Нужно хорошо знать их назначение и их состав для использования в программах. Чем лучше знания о библиотеках, тем быстрее и безошибочно можно создать сложную программу. В современных системах программирования доступны (большом количестве) библиотеки классов, которые описывают новые дополнительные типы данных.

16 Примеры программы с использованием строк

Вторая часть задания, помимо первой связанной с изучением теоретического раздела заключается в том, чтобы испытать в проекте СИ уже отлаженные программы и фрагменты программ. Возможно, что, осваивая теоретическую часть работы, вы уже на компьютере проверили выполнение фрагментов текста и применения различных операторов ветвления (из раздела 3), тогда вам будет проще продемонстрировать их работу преподавателю. В дополнение к примерам, расположенным выше нужно испытать и изучить примеры расположенные ниже. Эти действия нужно сделать в отладчике.

Для этого нужно создать пустой проект в MS VS (Test_LR2), как описано выше, скопировать через буфер обмена в него текст данных примеров, отладить его и выполнить.

17 Примеры, описанные в теоретической части ЛР

Нужно внимательно изучить и проверить работу всех примеров из теоретической части ЛР. Эти примеры расположены выше. Все примеры можно скопировать в свой проект. Все эти задания выполняются обязательно, они не требуют дополнительной отладки и легко (через буфер обмена -Clipboard) переносятся в программу. Все фрагменты должны демонстрироваться преподавателю. В частности, в первой части, там представлены следующие примеры:

  1. Описания строк и их инициализации, заполнения строки вручную,

  2. Копирования и слияния строк, ввода и вывода строк,

  3. Сравнения строк, контроль символов в строке,

  4. Преобразование к нижнему или верхнему регистру,

  5. Дублирования строк,

  6. Выделения составляющих строки по разделителям,

  7. Преобразование данных в строку и обратно,

  8. Сортировки строкового массива,

  9. Использования динамических строк.

Кроме этого ниже представлены примеры, которые могут быть полезными, в том числе и при выполнении контрольных заданий. Их тоже нужно изучить и проверить.

18 Пример на выделение подстроки

Пример выделения подстроки для строки strText5, начиная с символа с номером begChar. Число символов котрые быдут взяты равно – sizeSubstr. Эти значения задаются в программе. Для подстроки выделяется динамическая память, размером, на всякиц случай, превышающая размер исходной строки на число символам в подстроке. Полученное значение распечатывается.

//Выделение подстроки

int begChar =4 ;

int sizeSubstr = 7;

char strText5[] = "10123456789 123456789_123456789";

char * pSubstr = (char *) malloc ( sizeof (strText5) + sizeSubstr +1);

strncpy( pSubstr , strText5 + begChar, sizeSubstr + 1 );

pSubstr[5] = '\0'; // Сознательное укорачивание подстроки до 5-ти символов

printf( "Строка: %s Подстрока = %s c =%d число=%d\n",strText5, pSubstr ,begChar,sizeSubstr );

//

Результат получим такой:

Строка: 10123456789 123456789_123456789 Подстрока = 34567 c =4 число=7

19 Обмен строк одинакового размера

Для обмена строк одинакового размера можно использовать следующий фрагмент. Максимальные размеры данных строк должны быть идентичны (или размеры символьных массивов или размеры выделенной динамической памяти).

char TempStr[40];

char S1[40] ="Первая строка";

char S2[40] ="Вторая строка";

printf( "Перед обменом: %s - %s\n", S1 , S2 );

strcpy(TempStr , S1 );

strcpy(S1 , S2);

strcpy( S2 , TempStr);

printf( "После обмена: %s - %s\n", S1 , S2 );

Результат получим такой:

Перед обменом: Первая строка - Вторая строка

После обмена: Вторая строка - Первая строка

20 Поиск символа в строке

Поиск символа, содержащегося в строке на заданном множестве ("abc") символов и определение его номера. Если символов нет, то номер – конец строки, если строка пуста, то нуль.

// …

void test( const char * str, const char * strCharSet )

{

int pos = strcspn( str, strCharSet );

printf( "strcspn( \"%s\", \"%s\" ) = %d\n", str, strCharSet, pos );

};

// …

char string7[] = "cabbage";

// …

result = strspn( string7, "abc" );

printf( "The portion of '%s' containing only a, b, or c "

"is %d bytes long у строки - %d\n", string7, result , strlen(string7) );

// strcspn

test( "xyzbxz", "abc" );

test( "xyzbxz", "xyz" );

test( "xyzbxz", "no match" );

test( "xyzbxz", "" );

test( "", "abc" );

test( "", "" );

Результат получим такой:

strcspn( "xyzbxz", "abc" ) = 3

strcspn( "xyzbxz", "xyz" ) = 0

strcspn( "xyzbxz", "no match" ) = 6

strcspn( "xyzbxz", "" ) = 6

strcspn( "", "abc" ) = 0

strcspn( "", "" ) = 0

21 Замена всех символов в строке

Для заполнения все чтроки одним символом используется функция strset

char string7[] = "cabbage";

printf( "Before: %s\n", string7 );

_strset( string7, '*' ); //

//

printf( "After: %s\n", string7 );

Результат получим такой:

Before: cabbage

After: *******

22 Поиск вхождения подстроки в строке

Для поиска в строке (string) вхождения подстроки (str) используется функция strstr, пример ее использования и результаты показаны ниже. В строке мы ищем подстроку “вход”.

char str[] = "вход";

char string[] = "Счастливая собака остановилась у входа и залаяла";

char fmt1[] = " 1 2 3 4 5"; // Для разметки полей

char fmt2[] = "12345678901234567890123456789012345678901234567890" ; // Для разметки

char *pdest;

int result1;

printf( "Строка, в которой ищем:\n%s\nПодстроку: %s \n", string, str );

printf( "%s\n%s\n\n", fmt1, fmt2 );

pdest = strstr( string, str );

result1 = (int)(pdest - string + 1);

if ( pdest != NULL )

printf( "%s Подстрока найдена в позиции %d\n", str, result1 );

else

printf( "%s Не найдена подстрока!\n", str );

Результат получим такой:

Строка, в которой ищем:

Счастливая собака остановилась у входа и залаяла

Подстроку: вход

1 2 3 4 5

12345678901234567890123456789012345678901234567890

вход Подстрока найдена в позиции 34

23 Формирование действительного числа с точкой и знаком

Использование различных функций и приемов для работы со строками продемонстрируем на примере использования функции _fcvt, после использвания которой полученную строку нужно преобразовать: поставить точку в нужное место и добавить знак.

printf("Из вещественного (printf) -> '%f' в строку - %s \n", 125.5 , _fcvt( 125.5, 4 , &Dec , &Sign ) );

printf(" Параметры(1): где точка - %d и знак %d \n", Dec , Sign);

printf("Из вещественного (printf) -> '%f' в строку - %s \n", -25.5 , _fcvt( -25.5, 4 , &Dec , &Sign ) );

printf(" Параметры(2): где точка - %d и знак %d \n", Dec , Sign);

// Составим число

char RealBuf[15];

strcpy_s (Buf , 14 ,_fcvt( -25.5, 4 , &Dec , &Sign ) );

printf("Из вещественного с защитой Buf (printf) -> '%s' \n", Buf );

if ( Sign == 1 )

strcpy(RealBuf ,"-" );

strncat(RealBuf ,Buf , Dec );

RealBuf[Dec + 1 ] = '\0';

printf("Из вещественного с защитой RealBuf (printf) -> '%s' \n", RealBuf );

strcat (RealBuf , ".");

printf("Из вещественного с защитой RealBuf (printf) -> '%s' \n", RealBuf );

strncat (RealBuf , Buf + Dec , sizeof (Buf + Dec) );

printf("Из вещественного с защитой RealBuf (printf) -> '%s' \n", RealBuf );

Результат получим такой:

Из вещественного (printf) -> '125.500000' в строку - 1255000

Параметры(1): где точка - 3 и знак 0

Из вещественного (printf) -> '-25.500000' в строку - 255000

Параметры(2): где точка - 2 и знак 1

Из вещественного с защитой Buf (printf) -> '255000'

Из вещественного с защитой RealBuf (printf) -> '-25'

Из вещественного с защитой RealBuf (printf) -> '-25.'

Из вещественного с защитой RealBuf (printf) -> '-25.5000'

Нужно создать пустой проект в MS VS, как описано выше, скопировать через буфер обмена в него текст данного примера, отладить его и выполнить.

24 Контрольные задание ЛР №4.

25 Создание большой строки ФИО

Из трех строк, описанных и заранее инициализированных (Name[14], Fam[20], Otch[20]), создать новую строку FIO, данные разделяются пробелами. Массивы инициализировать своими данными (ФИО).

26 Создание строки ФИО инициалами

Из трех строк, описанных и введенных заранее с клавиатуры (Name[14], Fam[20], Otch[20]), создать новую строку FIO, в которой имя и отчество задаются инициалами (первыми буквами) с точками (Например, - Большаков С.А.). В символьные массивы – строки ввести свои данные (ФИО).

27 Замена символов

В одномерном символьном массиве (CharMas[40]) все символы по своему варианту заменить на другой символ, заданный вариантом (см. ниже). Массив предварительно инициализировать в программе. Для ветвления в цикле при замене символов использовать переключатель (switch). Оформить блок-схему программы.

28 Ввод и вывод массива

Написать фрагмент программы для ввода с клавиатуры массива строк (MasStr). Число вводимых строк предварительно вводиться с клавиатуры. Распечатать введенный массив строк в столбик с указанием номера каждой строки. Порядок вывода строк определяется вариантом (см. ниже). При выводе на экран оформить рамку символом точка (“.”).

29 Изменение порядка символов в строке

Изменить порядок расположения символов в строке (Str5[10]), заданной при описании ее в программе с помощью инициализации. Порядок замен определяется вариантом. Исходную строку и результат распечатать. Строка заканчивается нулевым символом, расположение которого не меняется. Алгоритм замен нужно уметь продемонстрировать преподавателю в отладчике п пошаговом режиме.

30 Минимум и максимум в массиве строк

В массиве (MasStr), который был введен в п.п 5.4 данной ЛР найти минимальную строку и ее номер. Результаты распечатать. Критерий “величины” (веса - упорядоченности) строки задается вариантом и может быть одним из двух: либо число символов в строке (для подсчета использовать функцию strlen) или алфавитный порядок (для оценки “величины” использовать функцию strcmp). Значения минимума и его номер распечатать.

31 Динамические строки

Описать указатель на строку (pStr). Выделить для этой строки динамическую память в 40 символов. Скопировать в эту строку большую строку из п.п. 5.1. Распечатать динамическую строку через указатель. Изменить в данной строке первую букву фамилии и снова распечатать. Освободить память, выделенную для строки.

32 Варианты заданий для студентов СУЦ.

Варианты заданий приведены ниже. Номер варианта должен соответсвовать номеру студента в групповом журнале.

п/п

Символы, для замены (зад. 5.3)

Символ, на который идет замена.

Порядок вывода массива строк

Порядок замен символов в строке (Str5)

Поиск экстренума

Критерий величины строки (функция)

абвгде-+

*

Прямой

На обратный (первый символ становится последним и т.д.)

Минимум

strlen

иклмн"№

пробел

Обратный (сначала выводиться последняя строка)

Четные меняют нечетные

Максимум

strcmp

опрст(&)

$

Прямой

На обратный

Минимум

strlen

хцчш]!}

*

Обратный

Четные - нечет

Максимум

strcmp

абвгде-+

пробел

Прямой

На обратный

Минимум

strlen

иклмн"№

$

Обратный

Четные - нечет

Максимум

strcmp

опрст(&)

*

Прямой

На обратный

Минимум

strlen

хцчш]!}

пробел

Обратный

Четные - нечет

Максимум

strcmp

абвгде-+

$

Прямой

На обратный

Минимум

strlen

33 Дополнительные требования для студентов СУЦ (д.т.).

Для продвинутых студентов, по желанию, можно построить программу с дополнительными требованиями. Дополнительные требования выполняются в дополнение основным требованиям ЛР.

34 Создание функции SubString

Спроектировать, реализовать и отладить функцию выбора подстроки из строки. В качестве параметров указываются: исходная строка, начальный символ, число символов. Предусмотреть вариант функции с 3-мя и 4-мя параметрами (Последний задает указатель подстроки). предусмотреть полный контроль входных параметров. Продемонстрировать ее использование в различных режимах. Функцию описать в отдельном заголовочном файле и использовать прототип в основной программе.

35 Создание функции SwapString для равных строк по длине

Спроектировать, реализовать и отладить функцию взаимной замены (Swap) строк. В данной функции предположить, что строки имеют одинаковый размер символьных массивов, в котором они записаны. Строки не являются динамическими. Продемонстрировать ее использование в различных режимах. Функцию описать в отдельном заголовочном файле и использовать прототип в основной программе.

36 Сортировка массива строк

Выполнить в двойном цикле сортировку массива строк. Массив задается в программе инициализацией при описании. Сортировка должна быть выполнена в алфавитном порядке по возрастанию. Для сортировки нужно использовать свою функцию SwapString. Массив строк вывести на экран до сортировки и после.

37 Замена подстроки в строке

Спроектировать, реализовать и отладить функцию замены одной подстроки другой подстрокой в большой строке. Например, по всей строке одна фамилия заменяется на другую фамилию. Использовать библиотечные функции для работы со строками. Продемонстрировать ее использование в различных режимах. Функцию описать в отдельном модуле *.cpp и использовать прототип в основной программе.

38 Сравнение строк

Спроектировать, реализовать и отладить функцию сравнения строк, аналогичную strncmp. Например, по всей строке одна фамилия заменяется на другую фамилию. Не использовать библиотечные функции для работы со строками. Продемонстрировать ее использование в различных режимах.

39 Создание функции DSwapString для динамических строк.

Спроектировать, реализовать и отладить функцию взаимной замены (Swap) строк. Строки могут быть разной длинны. Строки являются динамическими, то есть под них выделена динамическая память. Использовать функции malloc и free для работы с динамической памятью. Продемонстрировать использование функции в различных режимах. Функцию описать в отдельном заголовочном файле и использовать прототип в основной программе.

40 Изучение библиотечных функций.

Изучить библиотечные функции: strftime, strrchr и _fcvt. Познакомиться с документацией, привести примеры использования данных функций. Познакомиться с библиотеками: string.h, malloc.h и stdlib.h. Для этого помимо документации можно прочитать эти заголовочные файлы.

41 Демонстрация, защита ЛР и отчет по ЛР.



Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5166
Авторов
на СтудИзбе
437
Средний доход
с одного платного файла
Обучение Подробнее