Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция по информатике.doc
Скачиваний:
24
Добавлен:
02.05.2014
Размер:
911.87 Кб
Скачать

Следующая программа init_str.Cpp инициализирует символьную строку при объявлении:

#include <iostream.h>

void main(void)

{    char title[64] = "Учимся программировать на языке C++";    char lesson[64] = "Символьные строки";    cout << "Книга: " << title << endl;    cout << "Урок: " << lesson << endl; }

Передача строк в функцию

Передача символьной строки в функцию подобна передаче любого массива в качестве параметра. Внутри функции вам нужно просто указать тип массива (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++"); }

Так как символ NULL указывает конец строки, функция не требует параметр, который задает количество элементов в массиве. Вместо этого функция может определить последний элемент, просто найдя в массиве символ NULL.

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

Известно, что символ NULL рассматривается в функциях Си обычно как символ, обозначающий конец строки. Такие функции, как fgets и cgets, присваивают символ NULL автоматически. В следующей программе SHOW_STR.C функция sets используется для чтения строки символов с клавиатуры, -затем с помощью цикла for выполняется посимвольный вывод содержимого строки до тех пор, пока не будет обнаружен символ NULL:

#include <stdio.h>

void main (void)

{

char string[256]; // Строка для ввода пользователя

int i; // Индекс в строке

printf("Введите строку символов и нажмите Enter:\n");

gets(string);

for (i = 0; string[i] != NULL; i++) putchar(string[i]);

printf("\nЧисло символов в строке равно %d\n", i);

}

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

#include <string.h>

size_t strlen(const char string);

В следующей программе STRLEN.C демонстрируется использование strlen:

#include <stdio.h>

#include <string.h>

void main(void)

{

char book_title[] = "1001 совет по C/C++";

printf("%s содержит %d символов\n",

book_title, strlen (book_title));

}

Копирование символьных строк

При работе со строками часто возникает потребность в копировании одной символьной строки в другую. Для выполнения этой операции большинство Си-компиляторов предоставляет функцию strcpy, с помощью которой символы одной строки (строка-источник) копируются в другую строку (строку-цель):

#include <string.h>

char *strcpy(char *destination, const char *source);

В качестве результата функция strcpy возвращает указатель на начало целевой строки. В следующей программе STRCPY.C демонстрируется использование функции strcpy:

#include <stdio.h>

#include <string.h>

void main(void)

{

char title[] = "1001 совет по C/C++";

char book[128];

strcpy(book, title);

printf("Название книги %s\n", book);

}

Массивы строк

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

Двухмерный массив можно представить себе как таблицу, имеющую ряды и колонки. Такой массив следует определять с двумя индексами, один из которых определяет количество рядов таблицы, а второй устанавливает количество колонок. Ниже приведены инструкции, определяющие массив, имеющий 10 рядов и 20 колонок, то есть содержащий 200 целочисленных переменных:

int table[10][20];

Представим себе каждый элемент как целое число, занимающее собственную клеточку в таблице 10х20. Элемент table[0][0] находится в левом верхнем углу таблицы, а элемент table[0][1] занимает соседнюю клетку справа в том же ряду.

Определяя массив строк, также необходимо использовать два индекса. Первый определяет максимальное количество строк в массиве, а второй указывает максимальную длину каждой строки. Таким образом, определение

char names[10][20];

задает десять строковых переменных names длиной не больше 19 символов в каждой.

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

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

name[index][index2] = letter;

Первый индекс указывает номер нужной строки внутри массива, а второй определяет позицию символа внутри строки.

Расположение матриц в памяти

Двумерный массив можно инициировать так:

static int matr[2][5] = {{3,4,0,1,2},{6,5,1,4,9}};  

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

Например, для массива char aCh[2][4] будет выделено восемь байтов памяти, в которых в следующем порядке будут размещены элементы массива:

элемент

aCh[0][0]

aCh[0][1]

aCh[0][2]

aCh[0][3]

aCh[1][0]

aCh[1][1]

aCh[1][2]

aCh[1][3]

N байта

1

2

3

4

5

6

7

8

Трехмерный массив

При размещении трехмерного массива char aс[3][2][3] память под элементы этого массива будет выделяться последовательно в соответствии со следующими значениями индексов:

A000

A001

A002

A010

A011

A012

A100

A101

A102

A110

A111

A112

A200

A201

A202

A210

A211

A212

Общий объем выделяемой под массив памяти определяется как произведение всех размерностей массива (общее число элементов), умноженное на длину типа данных массива.