7.1 Строка символов
Владение техникой обработки текстовой информации является неотъемлемым атрибутом современного
арсенала программиста. При создании программ текстовой обработки необходимо
определить:
- способы
кодирования теста;
- способы
представления строк символов;
- алгоритмы
обработки;
- способы
кодирования теста;
- способы
представления строк символов.
Известны следующие способы представления строк символов:
- в
ячейках последовательно представлены коды символов, в последней ячейке
содержится некоторый
код, который означает конец строки;
- размер
строки задается в начальной ячейке, далее в ячейках последовательно
представлены коды символов.
Первоначально ячейкой для представления символов являлся байт. В Си была принята первая форма
представления строк символов, концевым значением было принято нулевое значение(’\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
|