.: [предыдущая | оглавление | следующая] :.

7.1 Строка символов

Владение техникой обработки текстовой информации является неотъемлемым атрибутом современного арсенала программиста. При создании программ текстовой обработки необходимо определить:

  1. способы кодирования теста;
  2. способы представления строк символов;
  3. алгоритмы обработки;
  4. способы кодирования теста;
  5. способы представления строк символов.

Известны следующие способы представления строк символов:

  1. в ячейках последовательно представлены коды символов, в последней ячейке содержится некоторый код, который означает конец строки;
  2. размер строки задается в начальной ячейке, далее в ячейках последовательно представлены коды символов.

Первоначально ячейкой для представления символов являлся байт. В Си была принята первая форма представления строк символов, концевым значением было принято нулевое значение(’\0 ’). Второй способ представления характерен для Паскаля. Оба этих представления имеют недостатки: в первом случае размер строки приходится вычислять, во втором случае строка не может превышать размер 256 символов. Во втором случае приходится вводить понятие коротких и длинных строк, поскольку ячейка, указывающая размер строки, может иметь разный размер (1 байт, слово).

Строковая константа - это последовательность символов, заключенная в двойные кавычки: "это строка".

Каждая строковая константа содержит на один символ больше, чем кажется; все они заканчиваются пустым символом '\0' со значением 0. Например:

sizeof("asdf") == 5;

Строка имеет тип "вектор из соответствующего числа символов", поэтому "asdf" имеет тип char[5]. Пустая строка записывается "" (и имеет тип char[1]). Заметьте, что для каждой строки s strlen(s)==sizeof(s)-1, поскольку strlen() не учитывает завершающий 0.

Соглашение о представлении неграфических символов с обратной косой можно использовать также и внутри строки. Это дает возможность представлять в строке двойные кавычки и escape-символ \. Самым обычным символом этого рода является, безусловно, символ новой строки '\n'. Например:

cout << "гудок в конце сообщения\007\n"
где 7 - значение ASKII символа bel (звонок).

В строке невозможно иметь "настоящую" новую строку:

"это не строка,
а синтаксическая ошибка"

Однако в строке может стоять обратная косая, сразу после которой идет новая строка; и то, и другое будет проигнорировано. Например:

cout << "здесь все \
ok"

Напечатает: здесь все ok

.: [предыдущая | оглавление | следующая] :.