Выбрать главу

// Преобразование символов строки  в их прописные эквиваленты.

#include <iostream>

#include <cstring>

#include <cctype>

using namespace std;

int main()

{

 char str[80];

 int i;

 strcpy(str, "test");

 for(i=0; str[i]; i++) str[i] = toupper(str[i]);

  cout << str;

 return 0;

}

Эта программа при выполнении выведет на экран слово TEST. Здесь используется библиотечная функция toupper(), которая возвращает прописной эквивалент своего символьного аргумента. Для вызова функции toupper() необходимо включить в программу заголовок <cctype>.

Обратите внимание на то, что в качестве условия завершения цикла for используется массив str, индексируемый управляющей переменной i (str[i]). Такой способ управления циклом вполне приемлем, поскольку за истинное значение в C++ принимается любое ненулевое значение. Вспомните, что все печатные символы представляются значениями, не равными нулю, и только символ, завершающий строку, равен нулю. Следовательно, этот цикл работает до тех пор, пока индекс не укажет на нулевой признак конца строки, т.е. пока значение str[i] не станет нулевым. Поскольку нулевой символ отмечает конец строки, цикл останавливается в точности там, где нужно. При дальнейшей работе с этой книгой вы увидите множество примеров, в которых нулевой признак конца строки используется подобным образом.

Важно! Помимо функции toupper(), стандартная библиотека C++ содержит много других функций обработки символов. Например, функцию toupper() дополняет функция tolower(), которая возвращает строчный эквивалент своего символьного аргумента. Часто используются такие функции, как isalpha(), isdigit(), isspace() и ispunct(), которые принимают символьный аргумент и определяют, принадлежит ли он к соответствующей категории. Например, функция isalpha() возвращает значение ИСТИНА, если ее аргументом является буква (элемент алфавита).

Двумерные массивы

В C++ можно использовать многомерные массивы. Простейший многомерный массив — двумерный. Двумерный массив, по сути, представляет собой список одномерных массивов. Чтобы объявить двумерный массив целочисленных значений размером 10x20 с именем twod, достаточно записать следующее: 

int twod[10][20];

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

Чтобы получить доступ к элементу массива twod с координатами 3,5 , необходимо использовать запись twod[3][5]. В следующем примере в двумерный массив помещаются последовательные числа от 1 до 12.

#include <iostream>

using namespace std;

int main()

{

 int t,i, num[3] [4];

 for(t=0; t<3; ++t) {

  for(i=0; i<4; ++i) {

   num[t][i] = (t*4)+i+l;

   cout << num[t][i] << ' ';

  }

  cout << '\n';

 }

 return 0;

}

В этом примере элемент num[0][0] получит значение 1, элемент num[0][1] — значение 2, элемент num[0][2] — значение 3 и т.д. Значение элемента num[2][3] будет равно числу 12. Схематически этот массив можно представить, как показано на рис. 5.1.

В двумерном массиве позиция любого элемента определяется двумя индексами. Если представить двумерный массив в виде таблицы данных, то один индекс означает строку, а второй — столбец. Из этого следует, что, если к доступ элементам массива предоставить в порядке, в котором они реально хранятся в памяти, то правый индекс будет изменяться быстрее, чем левый.

Необходимо помнить, что место хранения для всех элементов массива определяется во время компиляции. Кроме того, память, выделенная для хранения массива, используется в течение всего времени существования массива. Для определения количества байтов памяти, занимаемой двумерным массивом, используйте следующую формулу.