Стандартный цикл обработки строки




ЗНАЕТЕ ЛИ ВЫ?

Стандартный цикл обработки строки



1) char str[80];

for (i=0; str[i]!=0; i=0)

{

алгоритм обработки str[i]/*(str+i)

}

2) перебор строки, когда переменная цикла – адрес текущего символа

char *pBegin=new char[80];

char *p; // адрес текущего символа

for (p=pBegin;*p!=0;p++)

{

алгоритм обработки текущего символа *p

}

 

Задача: дана строка, вычислить её размер

 

СТАТИЧЕСКИ

int main(void)

{

char str[80];

int i, kol;

cin.getline(str,80);

for(kol=0,i=0;str[i]!=0;i++)

kol++;

cout<<kol<<endl;

return 0;

}

 

ДИНАМИЧЕСКИ

int main(void)

{

char *p=new char[80];

int n=0;

cout << "\n vvedite stroky ";

cin.getline(p,80);

// цикл построен таким образом, что p содержит адрес текущего символа

while(*p!=0)

{

n++;

p++; // Увеличиваем адрес для перехода к следующему символу

}

cout << "\n kolichestvo=" << n << endl;

return 0;

}

+

24.Одномерные числовые массивы в языке С++: объявление (статически), инициализация, доступ к элементам массива, стандартный цикл обработки.

Одномерные числовые массивы

Особенность – любая обработка численного массива – цикл.

Под числовой массив выделяем памяти столько, сколько необходимо.

Статические массивы

1) Как объявить?

Размерность задается только константным данным(или целым)

#define SIZE 7

или

const int SIZE=7;

int mas[SIZE];

или

int mas1[SIZE]={1,2,3,4,5,6,7}; // с инициализацией

После выделения памяти в элементах массива находится «мусор». При объявлении массива возможна инициализация.

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

 

2) Как определить адрес и значение элемента массива?

Имя массива – константный адрес первого элемента массива.

mas+i – адрес элемента с индексом i

*(mas+i) или mas[i]– значение элемента с индексом i

 

Динамические массивы

Размер может задаваться константным или переменной, значение которой должно быть определено присваиванием или вводом. Память выделяется в процессе выполнения программы.

const int SIZE=7; // или #define SIZE 7

int *p=new int[SIZE];

 

Указатель инициализируется адресом первого байта

 

p+i – адрес элемента с индексом i

*(p+i) или p[i] – значение элемента с индексом i

Перебор элементов for (i=0;i<n;i++)

 

//Обращение к элементам массива по имени осуществляется по индексу, значение которого начинается с нуля.

mas[0]=1

mas[1]=2;

mas[2]=3;

 

 

ð for(i=0;i<SIZE;i++)

{

алгоритм обработки i-го элемента; cin>>* (a+i) или cin>>a[i];

}

+

25.Двумерные числовые массивы в языке С++: объявление (статически), инициализация, доступ к элементам массива, стандартные циклы обработки.

Многомерные массивы

на примере матриц

#define RAZ1 2

#define RAZ2 4

#define RAZN 7 // объявление многомерного массива

 

int MAS[RAZ1][RAZ2]…RAZ[N];

 

Элементы массива лежат в памяти последовательно – друг за другом, так, что быстрее всего изменяется самый правый индекс.

// Двумерный массив располагается построчно.

a [0] [0], a [0] [1], a [0] [2]

a [1][0], a [1] [1], a [1] [2]

 

Матрицы

Матрицы имеют два набора.

Элементы матрицы лежат в памяти по одному, друг за другом, построчно.

Статические матрицы

Как объявить матрицу?

Размер – константное данное

#define STR 3

#define STLB 4

или

const int STR=3, STLB=4;

int A[STR][STLB];

int B[STR][STLB]={ ,5,6,7,8,9,10,11,12}; // с инициализацией, где 1,2,3,4 – первая строка, 5,6,7,8 – вторая строка, 9,10,11,12 – третья строка.

int C[STR][STLB]={{1,2,3},{5,6,7,8},{9,10,11,12};

 

2) Адрес элемента матрицы

A[i] – адрес i-ой строки, т.е. адрес 1-го элемента в i-ой строке

0<=i<STR

A[i]+j – адрес элемента матрицы

0<=i<STR 0<=j<STLB

3) Значение элемента матрицы

*(A[i]+j) или A[i][j]

 

Динамические матрицы

Работаем как с одномерным массивом.

Как объявить матрицу?

Размер – константное данное или переменная

int STR, STLB;

cin>>STR>>STLB;

int *p;

p=new int[STR*STLB]

delete []p;

 

2) Адрес элемента массива

p+i*STLB – количество в полных строках

p+i*STLB+j – смещение по неполной строке

 

3) Значение элемента массива

*(p+i*STLB+j) или p[i*STLB+j]

 

Циклы перебора матрицы

Пусть есть матрица A, STR=3 и STLB=4

a00 a01 a02 a03

a10 a11 a12 a13

a20 a21 a22 a23

 

Способ: перебор конкретной строки с номером N

N--; // номер превратился в индекс строки

for (j=0; j<STLB; j++)

{

алгоритм обработки a[n][j]

}

 

Способ: перебор всей матрицы построчно

for (i=0; i<STR;i++)

{

for(j=0;j<STLB;j++)

{

алгоритм обработки

}

//конец i-ой строки

}

 

Способ: перебор конкретного столбца с номером M

 

M--; // номер превратился в индекс столбца

for (i=0;i<STR;i++)

{

алгоритм обработки

}

 

 





Последнее изменение этой страницы: 2016-06-06; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.239.51.78 (0.011 с.)