Главная страница
Навигация по странице:

  • Статические многомерные массивы (C-массивы)

  • Динамические многомерные массивы Память под массив выделяется динамически Динамическое массивы используют, когда размер массива неизвестен

  • Обработка строковых данных

  • Лабораторная № 3 Програмирование. Лаб3(2021). Лабораторная работа 3 по теме " Массивы и строки". Цель работы приобретение навыков получение навыков описания одномерных и двумерных массивов


    Скачать 222.5 Kb.
    НазваниеЛабораторная работа 3 по теме " Массивы и строки". Цель работы приобретение навыков получение навыков описания одномерных и двумерных массивов
    АнкорЛабораторная № 3 Програмирование
    Дата29.09.2022
    Размер222.5 Kb.
    Формат файлаdoc
    Имя файлаЛаб3(2021).doc
    ТипЛабораторная работа
    #704511
    страница4 из 8
    1   2   3   4   5   6   7   8

    Информация по массивам для дополнительного задания



    Статические многомерные массивы (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 );

    Функция сравнивает посимвольно две строки и возвращает целое число в соответствии с таблицей:

    Возвращаемое значение

    Назначение

    <0

    строка1 меньше чем строка2

    =0

    строка1 равна строка2

    >0

    строка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(строка).

    Эта функция возвращает число.

    1   2   3   4   5   6   7   8


    написать администратору сайта