пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

I семестр:
» c++

'f, 'а', ' t', 'е', 's', 's', 'a', ''

; // а это – строка Обе эти переменные представляют собой массивы char, но только вторая из них является строкой. Нулевой символ играет фундаментальную роль в строках стиля С. Например, в C++ имеется множество функций для обработки строк, включая те, что используются cout. Все они обрабатывают строки символ за символом до тех пор, пока не встретится нулевой символ. Если вы просите объект cout отобразить такую строку, как cat из предыдущего примера, он выводит первых семь символов, обнаруживает нулевой символ и на этом останавливается. Однако если вы вдруг решите вывести в cout массив dog из предыдущего примера, который не является строкой, то cout напечатает восемь символов из этого массива и будет продолжать двигаться по памяти, байт за байтом, интерпретируя каждый из них как символ, подлежащий выводу, пока не встретит нулевой символ. Поскольку нулевые символы, которые, по сути, представляют собой байты, содержащие нули, встречаются в памяти довольно часто, ошибка обычно обнаруживается быстро, но в любом случае вы не должны трактовать нестроковые символьные массивы как строки. Пример инициализации массива cat выглядит довольно громоздким и утомительным — множество одиночных кавычек плюс необходимость помнить о нулевом символе. Не волнуйтесь. Существует более простой способ инициализации массива с помощью строки. Для этого просто используйте строку в двойных кавычках, которая называется строковой константой или строковым литералом, как показано ниже: char bird[11] = "Mr. Cheeps"; // наличие символа \0 подразумевается char fish[] = "Bubbles"; // позволяет компилятору подсчитать количество элементов Строки в двойных кавычках всегда неявно включают ограничивающий нулевой символ, поэтому указывать его явно не требуется (рис. 4.2.) К тому же разнообразные средства ввода C++, предназначенные для чтения строки с клавиатурного ввода в массив char, автоматически добавляют завершающий нулевой символ. (Если при компиляции программы из листинга 4.1 вы обнаружите необходимость в использовании ключевого слова static для инициализации массива, это также понадобится сделать с показанными выше массивами char.) Необходимо обеспечить достаточный размер массива, чтобы в него поместились все символы строки, включая нулевой. Инициализация символьного массива строковой константой — это один из тех случаев, когда безопаснее поручить компилятору подсчет количества элементов в массиве. Если сделать массив больше строки, никаких проблем не возникнет — только непроизводительный расход пространства. Причина в том, что функции, которые работают со строками, руководствуются позицией нулевого символа, а не размером массива. В C++ не накладывается никаких ограничений на длину строки. Строковая константа (в двойных кавычках) не взаимозаменяема с символьной константой (в одинарных кавычках). Символьная константа, такая как 'S', представляет собой сокращенное обозначение для кода символа. В системе ASCII константа 'S' — это просто другой способ записи кода 83. Поэтому следующий оператор присваивает значение 83 переменной shirt_size: char shirt_size = ' S'; // нормально С другой стороны, "S" не является символьной константой; это строка, состоящая из двух символов — S и \0. Хуже того, "S" в действительности представляет адрес памяти, по которому размещается строка. Это значит, что приведенный ниже оператор означает попытку присвоить адрес памяти переменной shirt_size: char shirt_size = "S"; //не допускается по причине несоответствия типов Поскольку адрес памяти — это отдельный тип в C++, компилятор не пропустит подобную запись. Конкатенация строковых литералов Иногда строки могут оказаться слишком большими, чтобы удобно разместиться в одной строке кода. C++ позволяет выполнять конкатенацию строковых литералов — т.е. комбинировать две строки с двойными кавычками в одну. В действительности любые две строковые константы, разделенные только пробельным символом (пробелами, символами табуляции и символами новой строки), автоматически объединяются в одну. Таким образом, следующие три оператора вывода эквивалентны: cout << "I'd give my right arm to be" " a great violinist. \n"; cout << "I'd give my right arm to be a great violinist. \n" ; cout << "I'd give my right ar" "m to be a great violinist. \n"; Обратите внимание, что такие объединения не добавляют никаких пробелов к объединяемым строкам. Первый символ второй строки немедленно следует за последним символом первой, не считая \0 в первой строке. Символ \0 из первой строки заменяется первым символом второй строки. Использование строк в массивах Два наиболее распространенных метода помещения строки в массив заключаются в инициализации массива строковой константой и чтением из клавиатурного или файлового ввода в массив. В листинге 4.2 эти подходы демонстрируются за счет инициализации одного массива строкой в двойных кавычках и использования сin для помещения вводимой строки в другой массив. В программе также применяется стандартная библиотечная функция stlen () для получения длины строки. Стандартный заголовочный файл cstring предоставляет объявления для этой и многих других функций, работающих со строками. //Листинг 4.2. strings. срр // strings.срр -- сохранение строк в массиве #include #include // для функции strlen() int main ()

21.10.2020; 13:22
хиты: 36
рейтинг:0
Точные науки
информатика
Всемирные компьютерные сети (Компьютерные сети)
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь