Строка представляет собой массив символов, заканчивающийся нуль-символом. Нуль-символ — это символ с кодом, равным 0, что записывается в виде управляющей последовательности '\0'. По положению нуль-символа определяется фактическая длина строки. Строку можно инициализировать строковым литералом:
char str[10] = "Vasia";
В этом примере под строку выделяется 10 байт, 5 из которых занято под символы строки, а шестой — под нуль-символ. Если строка при определении инициализируется, ее размерность можно опускать (компилятор сам выделит соответствующее количество байт):
char str[] = "Vasia"; //Выделено и заполнено 6 байт
Оператор
char *str = "Vasia";
создает не строковую переменную, а указатель на строковую константу.
Операция присваивания одной строки другой не определена и может выполняться с помощью цикла или функций стандартной библиотеки.
Библиотека предоставляет возможности копирования, сравнения, объединения строк, поиска подстроки, определения длины строки и т.д. (возможности библиотеки описаны в разделе «Функции работы со строками и символами»), а также содержит специальные функции ввода строк и отдельных символов с клавиатуры и из файла.
Пример 3
Пример (программа запрашивает пароль не более трех раз).
#include <stdio.h>#include <string> int main() { char s[5], passw[] = "kuku"; // passw – эталонный пароль. Можно описать как *passw = "kuku"; int i, k = 0; for (i = 0; !k && i < 3; i++) { printf("\nвведите пароль:\n"); gets(s); // функция ввода строки if (strstr(s, passw)) // функция сравнения строк k = 1; } if (k) printf("\nпароль принят"); else printf("\nпароль не принят"); return 0;}
При работе со строками часто используются указатели.
Пример 4
Рассмотрим процесс копирования строки srcв строку dest.
#include <iostream>using namespace std; int main() { char *src = new char [10]; char *dest = new char [10], *d = dest; cin << src; while (*d++ = *src++); cout << dest; return 0;}
1. Массивы в C++
Массив – это совокупность величин, которая обладает следующими свойствами:
· все элементы массива имеют один и тот же тип;
· массив имеет одно имя для всех элементов;
· доступ к конкретному элементу массива осуществляется по индексу (индексам).
Другими словами, массив – это структура однотипных элементов, занимающих непрерывную область памяти.
С массивом связаны следующие его свойства: имя, тип, размерность, размер.
В языке C++ массив может состоять из элементов любого типа, кроме типа void и функций, т.е. элементы массива могут иметь базовый, перечислимый, структурный тип, быть объединением, указателем или массивом.
Квадратные скобки являются элементом синтаксиса, а не признаком необязательности конструкции.
Объявление массива может иметь одну из двух синтаксических форм, указанных выше. Квадратные скобки, следующие за именем, – признак того, что переменная является массивом. Константное выражение, заключенное в квадратные скобки определяет число элементов в массиве.
В C++ нельзя определять произвольные диапазоны для индексов. Индексация элементов массива в языке C++ начинается с нуля, последний элемент массива имеет индекс на единицу меньше, чем число элементов массива.
Во второй синтаксической форме константное выражение в квадратных скобках опущено. Эта форма может быть использована в следующих случаях:
1) если в объявлении массива присутствует инициализатор;
2) массив объявляется как формальный параметр функции;
3) данное объявление является ссылкой на объявление массива где-то в другом месте программы.
1.1.2. Многомерные массивы
Многомерный (N-мерный) массив, или массив массивов, объявляется путем задания последовательности константных выражений в квадратных скобках, следующей за именем:
Каждое константное выражение определяет количество элементов в соответствующем измерении массива.
Для многомерного массива может быть опущена только первая размерность.
int x[10];
// Одномерный массив из 10 целых чисел.
// Индексы меняются от 0 до 9.
double y[2][10];
/* Двумерный массив вещественных чисел из 2 строк и 10 столбцов.*/
1.2. Инициализация массивов
Как и простые переменные, массивы могут быть инициализированы при объявлении.
Инициализатор для объектов составных типов (каким является массив) состоит из списка инициализаторов, разделенных запятыми и заключенных в фигурные скобки. Каждый инициализатор в списке представляет собой константу соответствующего типа или список инициализаторов (при инициализации многомерных массивов).
Наличие списка инициализаторов в объявлении массива позволяет не указывать число элементов по его первой размерности. В этом случае количество элементов в списке инициализаторов и определяет число элементов по первой размерности массива. Тем самым определяется размер памяти, необходимой для хранения массива. Число элементов по остальным размерностям массива, кроме первой, указывать обязательно.
Если в списке инициализаторов меньше элементов, чем в массиве, то оставшиеся элементы неявно инициализируются нулевыми значениями.
Если же число инициализаторов больше, чем требуется, то выдается сообщение об ошибке.