char strM2[20] = "Yes"; Массив strM1 состоит из 14 символов, массив strM2 - из 20, но его четвертый символ имеет код 0, сигнализирующий о фактическом конце строки. Другой способ задания строк С, заканчивающихся нулем, состоит в использовании типизированного указателя - char*. //Строки, заданные указателем char* char* strPM1 ="Hello, World!"; char* strPM2; Два типа, char[] и char*, допускают взаимные преобразования. Не могу удержаться, чтобы не привести процедуру копирования строк, соответствующую духу и стилю С++: void mycpy(char* p, const char* q) { while(*p++ = *q++); } Эта процедура копирует содержимое строки q в строку p. В этой короткой программе, в которой, кроме условия цикла while, ничего больше нет, фактически используются многие средства языка С++ - разыменование указателей, адресная арифметика, присваивание как операция, завершение строки нулем, логическая интерпретация значений. Раз уж я привел эту программу, то поясню, как она работает. Вначале указатель q задает адрес начала строки, поэтому разыменование *q задает первый символ копируемой строки. Это значение присваивается первому символу строки p. Суффиксные операции p++ и q++ увеличивают значение указателей на единицу, но поскольку используется адресная арифметика, то в результате вычисляется адрес, задающий следующий символ соответствующих строк, и процесс копирования продолжается. При достижении последнего символа строки q - символа с кодом нуль - он также будет скопирован в строку p. Но в этот момент выражение присваивание впервые вернет в качестве значения результат 0, который будет проинтерпретирован в условии цикла while как false, и цикл завершит свою работу. Строка будет скопирована. Можно восхищаться этой короткой и эффективной программой, можно ругать ее за сложность восприятия. Трудно назвать ее интуитивно понятной. Но во многом все определяется вкусом и привычкой. Тип string не является частью языка С++, но входит в библиотеку, определяемую стандартом языка. Стандартные библиотеки, по сути, являются продолжением языка. Тип (класс) string обеспечивает работу со строками переменной длины и поддерживает многие полезные операции над строками. Давайте разберемся, как устроены строки C# и что взято из языка С++. Класс char В C# есть символьный класс Char, основанный на классе System.Char и использующий двухбайтную кодировку Unicode представления символов. Для этого типа в языке определены символьные константы - символьные литералы. Константу можно задавать: - символом, заключенным в одинарные кавычки;
- escape-последовательностью, задающей код символа;
|