Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Многомерные массивы, как правило, реализованные как одномерные массивы, каждый элемент которых является ссылкой на другой одномерный массив.






Обращение к многомерным массивам происходит по всем его индексам, так например: двумерный массив хорошо представляется как таблица со строками и столбцами. Данные в строках рассматриваются слева направо, в то время как в столбцах - сверху вниз. Для обращения к требуемому элементу двумерного массива необходимо указать номер строки и номер столбца.

float *array1; // Одномерный массив int **array2; // Многомерный массив array1 = new float[10]; // выделение 10 блоков размером типа float array2 = new int*[16]; // выделение 16 блоков размером типа указателя на int for(int i = 0; i < 16; i++) array2[i] = new int[8];

 

В С++ операции new и delete предназначены для динамического распределения памяти компьютера. Операция new выделяет память из области свободной памяти, а операция delete высвобождает выделенную память. Выделяемая память, после её использования должна высвобождаться, поэтому операции new и delete используются парами. Даже если не высвобождать память явно, то она освободится ресурсами ОС по завершению работы программы. Рекомендую все-таки не забывать про операцию delete.

// высвобождение памяти отводимой под одномерный динамический массив:

delete [] < имя массива>;

 

// высвобождение памяти отводимой под двумерный динамический массив:

for (int count = 0; count < n; count++)

delete [] < имя массива> [count];

// где n – количество строк в массиве

 

Многомерные массивы передаются в функцию как:

< тип> < имя массива> [][][][];

// и все его размерности;

 

Матрицы – смотри про двумерные массивы

 

 

Структуры:

Структуры - это объединенные данные, у которых есть некоторая логическая взаимосвязь. В отличие от массивов, структуры могут содержать данные разных типов.

struct < имя> {

//описание полей

< тип> < имя>

};

Доступ к полям структуры: < имя переменной>.< имя поля>

Cтруктуру можно передавать в функцию по значению и по адресу

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

Ввод и вывод:

Ввод данных типа структуры выполняется поэлементно стандартных типов:

cin> > 01.b.x> > 01.b.y;

cout< < 01.b.x< < 01.b.y;

Можно сделать структуру типа структуры!

 

Динамическая структура:

Struct Prim
{
int nom;
};
Struct Zap
{
Prim a;
Zap *next;
};

int main()
{
Zap *beg=0;
//добавляем элемент структуры
Zap *p=new Zap;
p-> a.nom=1;
*beg=p;
p-> next=0;
}

В итоге получаем структуры из одно элемента, который состоит из поля типа int со значением 1 и указателем на конец структуры, т.е. на ноль.

Массив структур:

Объявляется структура

struct MMM {

int S;

float F;

char Str;

}

Объявляется массив типа структуры

MMM mass[100];

Присваивать по элементам

mass[1].S=55;

mass[1].F=0.75;

mass[1].Str=”This Fucking World”;

 

Билет

Описание строк:

Строка в С++ - это массив символов, оканчивающийся нулевым символом ('\0').

Особенности инициализации и хранения строк:

А)одновременная инициализация и объявление

Char slovo[6]=”tiger”;

Или

Charslovo[]={‘t’, ’I’, ’g’, ’e’, ’r’, ’\0’);

Если одновременно происходят инициализация и объявление, то указывать размер не обязательно.

Б) вручную

For (int n=0; n< 6; n++)

Cin> > Slovo[n]; Строка есть не что иное, как набор символов, и, соответственно, для хранения строк можно использовать символьные массивы. Например, строка " QWERTY" имет тип char[7]

Доступ к элементу строки (символу) осуществляется также как и доступ к элементу массива

Основные функции для обработки строк в С++

string.h - это библиотека обработки строк

1)Функция int strlen (const char* s); - определяет длину строки s. Возвращает количество символов, предшествующих завершающему нулевому символу

2) Функция char *strcpy(char *s1, const char *s2); - копирует строку s2 в массив символов s1. Возвращает значение s1

3)Функция int *strcmp(const char *s1, const char *s2); - сравнивает строки s1 и s2 (по ASCII-кодам). Функция возвращает значение 0, если строки s1 и s2 равны, значение меньше ноля, если строка s1 меньше s2, и значение больше ноля, если s1 больше s2.

4) Функция char *strcat(char *s1, const char *s2); - добавляет строку s2 к строке s1. Первый символ строки s2 записывается поверх ноль-символа строки s1. Возвращает s1.

5)Функция char *strncpy(char *s1, const char *s2, int n); - копирует не болеее n символов строки s2 в массив символов s1. Возвращает s1.

6)Функция char *strncmp(char *s1, const char *s2, int n); - сравнивает до n символов строки s1 со строкой s2. Возвращает 0, меньше, чем 0 или больше, чем 0, если s1 соответственно равн, меньше или больше s2.

7)Функция char *strncat(char *s1, const char *s2, int n); - присоединяет первые n символов строки s2 в строку s1. Возвращает s1.

8)Функция char *strchr(const char *s, int c); - проверяет строку s на содержание символа хранящегося в c. Результатом функции является адрес первого вхождения символа c в строку s. Если символ не найден, возващается NULL.

9)Функция char *strstr(const char *s1, const char *s2); - проверяет строку s1 на содержание подстроки s2. Результатом функции является адрес первого вхождения подстроки s2 в строку s1. Если подстрока не найдена, возващается NULL.

10)Функция char *strlwr(char *s); - конвертирует строку к нижнему регистру (т.е. переводит строку в строчные символы).

11) Функция char *strupr(char *s); - конвертирует строку к верхнему регистру

12) Функция char *strset(char *s, int ch); - заменяет ВСЕ символы в строке s на символ ch.

13)Функция char *strnset(char *s, int ch, int n); - заменяет первые n символов в строке s на символ ch.

14) Функция char *strrev(char *s); - меняет порядок следования символов в строке на противоположный (меняет первый символ с последним, второй символ с предпоследним и т.д.).

 

Ввод/вывод: в символьный массив можно ввести сразу всю строку, используя оператор ввода

cin > > Имя_массива;

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

cout < < Имя_массива;

Связь строки и указателя:

2)использование указателя на символ

#include< iostream.h>

void main()

{

char str[] = " Здравствуй, мир! "; // объявляем символьный массив

char *b; // объявляем указатель на символ

b = & str[12]; // теперь b указывает на 12-ый символ str

*b = 'M'; // присваиваем первому элементу b символ 'М'

cout < < b; // выводим строку b на экран (Мир!)

}

Преобразование символьной информации в числовую:

atof Преобразует символьную строку в значение типа float

atoi Преобразует символьную строку в значение типа int

atol Преобразует символьную строку в значение типа long int

strtod Преобразует символьную строку в значение типа double

strtol Преобразует символьную строку в значение типа long int

Также для преобразования в строковый формат можно использовать прибавление символа “0”

Для обратного преобразования можно отнять “0”, либо аналогично использовать функции:

char *itoa(int value, char *string, int radix);

char *ltoa(long value, char *string, int radix);

char *ultoa(unsigned long value, char*string, int radix);

Передача символьной строки в функцию подобна передаче любого массива в качестве параметра. Внутри функции вам нужно просто указать тип массива (char) и левую и правую скобки массива. Вам не надо указывать размер строки. Например, следующая программа SHOW_STR.CPP использует функцию show_string для вывода символьной строки на экран:

#include < iostream.h>

void show_string(char string[])

{

cout < < string < < endl;

}

void main(void)

{

show_string(" Привет, C++! ");

show_string(" Учусь программировать на C++");

}

Как видите, функция show_string трактует параметр символьной строки как массив:

void show_string(char string[])






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.