Лабораторная № 3 Програмирование. Лаб3(2021). Лабораторная работа 3 по теме " Массивы и строки". Цель работы приобретение навыков получение навыков описания одномерных и двумерных массивов
Скачать 222.5 Kb.
|
Информация по массивам для дополнительного заданияСтатические многомерные массивы (C-массивы) Память под массив выделяется автоматически Автоматическое выделение памяти используют, когда размер массива известен на этапе компиляции Могут быть как глобальными (определёнными вне функций), так и локальными (определёнными внутри функции или блока) Память для локального статического массива выделяется в стеке. Поэтому может произойти переполнение стека и, как следствие, аварийное завершение программы. Для многомерного статического массива выделяется единый блок памяти необходимого размера. Значения располагаются последовательно, поэтому возможно обращение с использованием адресной арифметикой. Можно создавать только прямоугольные массивы (одинаковое количество элементов в рамках одной размерности) Можно (но не нужно) создавать массивы с размером 0. Подробнее читайте самостоятельно, например по тэгу Zero-Length arrays. Динамические многомерные массивы Память под массив выделяется динамически Динамическое массивы используют, когда размер массива неизвестен на этапе компиляции Динамическое массивы используют, когда необходим контроль над временем жизни массива Могут быть как глобальными (определёнными вне функций), так и локальными (определёнными внутри функции или блока) Для массивов, использующих динамическое выделение памяти, память распределяется из «кучи» (heap), выделяемой программе операционной системой. Память, выделенная для динамического массива, не непрерывна (как в C-массиве) Можно создавать как прямоуголные, так и ступенчатые массивы Когда работа с массивом закончена, память, выделенную под массив необходимо освободить с помощью delete []. После того, как память освобождена, работать с массивом нельзя. Динамические ступенчатые массивы#include using namespace std; int main(){ setlocale(LC_ALL, "Russian"); cout<<" введите размер первой размерности ступенчатого массива: "; int N,M; cin>>N; int** massive = new int *[N]; int* secondDimOfMassive = new int [N]; for(int i=0; i { cout<<"введите размер ступенчатого массива для строки " < cin>>M; massive[i] = new int[M]; secondDimOfMassive[i]=M; } for(int i=0; i { for(int j=0;j { cout< } cout< } for (int i = 0; i < N; i++) { delete[] massive[i]; } delete[] massive; return 0; } Обработка строковых данныхСимвольные массивы как строкиСтроки символов широко используются в программировании, так как общение пользователя с программой ведется, в основном, с помощью текстовых сообщений, состоящих из отдельных строк. Для работы со строками в языках Си и C++ можно использовать массивы символов, завершаемые нулевым байтом. Нулевой байт считается концом строки. Символ с нулевым кодом можно изобразить как '\0'. Например, массив s, определенный инструкцией: char s[100]; может содержать строку длиной от 0 до 99 символов, так как из 100 байтов, выделенных под массив, один байт занимает признак конца строки '\0'. Данный символ может занимать любую позицию в массиве, поэтому в массиве фиксированного размера могут располагаться строки различной длины. Если s[0] == '\0', то массив s содержит строку нулевой длины, иначе говоря, пустую строку. В C++ имеется библиотека Приведем описание этих функций и примеры их применения. strcpy (результирующая строка, исходная строка) Функция копирует исходную строку в результирующую строку Пример. #include #include void main (){ char str1[]="Sample string"; char str2[40];char str3[40]; strcpy (str2,str1); strcpy(str3,"copy successful"); cout<<"str1: "< < Результат:str1:Sample string str2:Sample string str3: copy successful strcat ( результирующая строка, исходная строка ) Функция присоединяет исходную строку к концу результирующей строки. Пример #include #include void main (){char str[80]; strcpy (str,"strings "); strcat (str,"have been "); strcat (str,"concatenated."); cout< Результат: strings have been concatenated. int strcmp ( строка1, строка2 ); Функция сравнивает посимвольно две строки и возвращает целое число в соответствии с таблицей:
Пример. #include #include void main (){ char szKey[] = "apple"; char szInput[80]; do { cout<<"Which is my favourite fruit? "; cin>>szInput; } while (strcmp (szKey,szInput) != 0); cout<<"Correct answer"< Результат: Which is my favourite fruit? orange Which is my favourite fruit? apple Correct answer! strcspn ( строка1, строка2 ) Функция ищет в строке1 символы, принадлежащие строке2 и возвращает номер символа строки1, являющийся первым встретившимся символом строки2 (нумерация начинается с 0) или длину строки1, если такого символа нет Пример #include #include void main (){ char str1[] = "fcba73"; char str2[] = "1234567890"; int i; i = strcspn (str1,str2); cout<<"The first number in str1 is str1[“<<",i<<”]”;} Результат: The first number in str1 is str1[4] strlen ( строка) Функция возвращает длину строки. Пример. #include #include void main (){ char szInput[256]; cout<<"Enter a sentence: "; cin>>szInput; cout<<"Sentence entered is “<< strlen(szInput)<<” characters long"< Результат: Enter sentence: just testing Sentence entered is 12 characters long strncat ( результирующая строка, исходная строка, размер) Функция присоединяет к концу результирующей строки число символов исходной строки, указываемых третьим параметром. Пример. #include #include void main (){ char str1[20]; char str2[20]; strcpy (str1,"To be "); strcpy (str2,"or not to be"); strncat (str1, str2, 6);cout< Результат: To be or not strncpy (результирующая строка, исходная строка, размер) Функция копирует из исходной строки в результирующую строку число символов, определяемое третьим параметром. Пример. #include #include void main (){ char str1[]= "To be or not to be"; char str2[6]; strncpy (str2,str1,5); cout< Результат: To be strchr ( строка, символ ) Функция возвращает указатель на первый встретившийся символ в строке или NULL, если такого символа нет Пример. #include #include void main (){ char str[] = "This is a sample string"; char *pch; cout<<"Looking for 's' character in .."< pch=strchr(str,'s'); while (pch!=NULL) {cout<<"found at "< pch=strchr(pch+1,'s'); }} Результат: Looking for 's' character in "This is a sample string"... found at 4 found at 7 found at 11 found at 18 strspn ( строка1, строка2 ) Функция возвращает длину начальной подстроки строки1, содержащей символы строки2. Пример. #include #include void main (){int i; char strtext[] = "129th"; char cset[] = "1234567890"; i = strspn (strtext,cset); cout<<"Length of initial number is "< Результат: Length of initial number is 3 strstr ( строка1, строка2 ) Функция возвращает указатель на первую встречаемость строки2 в строке1 или NULL, если она не встретилась. Пример: #include #include void main (){char str[] ="This is a simple string"; char * pch; pch = strstr (str,"simple"); strncpy (pch,"sample",5); cout< Результат: This is a sample string atoi(строка). Строковое представление чисел не позволяет выполнять над ними арифметические операции. Поэтому необходимо преобразовать число из строковой формы в числовую форму. В библиотеке stdlib.h имеется функция atoi, предназначенная для преобразования строки в число. Ее формат: atoi(строка). Эта функция возвращает число. |