
- •Базовые понятия информатики. Понятие «Информатика» и «Информация»
- •Информация
- •Информационные технологии
- •Понятие алгоритма. Свойства и классы алгоритмов. Формы представления алгоритмов
- •Понятие алгоритма. Базовые алгоритмические структуры
- •Представление данных в памяти персонального компьютера.
- •Принципы обработки программных кодов
- •Компиляторы
- •Интерпретатор
- •Язык с. История развития. Основные свойства языка
- •Отличительные особенности языкаC
- •Элементы языка c
- •Константы
- •Базовые типы данных
- •Директива #include
- •Использование void
- •Инструкция return
- •Описание переменных
- •Обработка данных. Операторы
- •Арифметические операторы
- •Приоритет операторов и порядок вычислений
- •Используемые алгоритмы обработки данных
- •Аккумуляторы
- •Преобразования типов данных
- •Декларации и дефиниции функций
- •Формальные и фактические параметры. Вызов функций
- •Возврат функцией значений
- •Переменные в функциях
- •Автоматические (локальные) переменные
- •Внешние (глобальные) переменные
- •Статические переменные
- •Передача параметров по значению
- •Передача параметров по ссылке
- •Значения параметров по умолчанию
- •Перегрузка функций
- •Рекурсия
- •Встроенные функции
- •Обработка символьных данных
- •Функция puts()
- •Функция putchar()
- •Функция printf()
- •Выбор правильных средств вывода информации
- •Функция gets()
- •Функция getchar()
- •Функция scanf()
- •Выбор соответствующих средств ввода данных
- •Управляющие структуры Структуры выбора (if / else)
- •Структуры выбора (switch/case/default)
- •Структуры повторения (циклы)
- •Использование цикла for
- •Использование цикла do...While (постусловие)
- •Использование цикла while (предусловие)
- •Операторы передачи управления Оператор безусловного перехода goto
- •Оператор break
- •Оператор continue
- •Препроцессор языка Си
- •Массивы Объявление переменной массива
- •Использование индексной переменной
- •Инициализация массива при объявлении
- •Передача массивов в функции
- •Использование констант при объявлении массивов
- •Символьные строки
- •Массивы строк
- •Алгоритмы сортировки массива
- •Поиск заданного элемента в массиве
- •Указатели
- •Объявление указателя
- •Указатели на массивы
- •Операции над указателями
- •Указатели на строку
- •Указатели на функцию
- •Функции, возвращающие указатель
- •Указатели на многомерные массивы
- •Массивы указателей
- •Динамическое распределение памяти
- •Структуры данных
- •Реализация одних структур на базе других
- •Очередь
- •Операции над очередями
- •Операции над стеками
- •Ссылочные реализации структур данных
- •Операции над списками
Символьные строки
Программисты на C++ широко используют символьные строки для хранения имен пользователей, имен файлов и другой символьной информации.
Для объявления символьной строки внутри программы просто объявите массив типа char с количеством элементов, достаточным для хранения требуемых символов. Например, следующее объявление создает переменную символьной строки с именем filename, способную хранить 64 символа (не забывайте, что символ NULL является одним из этих 64 символов):
char filename[64];
Главное различие между символьными строками и другими типами массивов заключается в том, как C++ указывает последний элемент массива.
Программы на C++ представляют конец символьной строки с помощью символа NULL, который в C++ изображается как специальный символ ' '. Когда вы присваиваете символы символьной строке, вы должны поместить символ NULL (' ') после последнего символа в строке. Например, следующая программа ALPHABET. CPP присваивает буквы от А до Я переменной alphabet, используя цикл for. Затем программа добавляет символ NULL в эту переменную и выводит ее с помощью cout.
#include <iostream.h>
void main(void)
{ char alphabet [34]; // 33 буквы плюс NULL char letter; int index; for (letter = 'A', index = 0; letter <= 'Я'; letter++, index++) alphabet[index] = letter; alphabet[index] = NULL; cout << "Буквы " << alphabet; }
Когда выходной поток cout выводит символьную строку, он по одному выводит символы строки, пока не встретит символ NULL.
Как 'А' отличается от "А"
При рассмотрении программ на C++ вы можете встретить символы, заключенные в одинарные кавычки (например, 'А') и символы, заключенные в двойные кавычки ("А"). Символ внутри одинарных кавычек представляет собой символьную константу. Компилятор C++ выделяет только один байт памяти для хранения символьной константы. Однако символ в двойных кавычках представляет собой строковую константу — указанный символ и символ NULL (добавляемый компилятором). Таким образом, компилятор будет выделять два байта для символьной строки.
В зависимости от потребностей программы может возникнуть необходимость включения в строку знаков кавычек. Предположим, что требуется представить следующую строку:
ОН сказал "Стоп".
Поскольку в Си двойные кавычки используются для определения строковой константы, необходимо средство, подсказывающее компилятору присутствие кавычек в строке. Для задания кавычки в строке используется последовательность \":
"Он сказал \"Стоп\"."
Инициализация символьной строки
Как вы уже знаете, C++ позволяет вам инициализировать массивы при объявлении. Символьные строки C++ не являются исключением. Для инициализации символьной строки при объявлении укажите требуемую строку внутри двойных кавычек, как показано ниже:
char title[64] = "Учимся программировать на языке C++";
Если количество символов, присваиваемое строке, меньше размера массива, большинство компиляторов C++ будут присваивать символы NULL остающимся элементам строкового массива. Как и в случае с массивами других типов, если вы не указываете размер массива, который инициализируете при объявлении, компилятор C++ распределит достаточно памяти для размещения указанных букв и символа NULL:
char title[] = "Учимся программировать на языке C++";
Следующая программа INIT_STR.CPP инициализирует символьную строку при объявлении:
#include <iostream.h>
void main(void)
{ char title[64] = "Учимся программировать на языке C++"; char lesson[64] = "Символьные строки"; cout << "Книга: " << title << endl; cout << "Урок: " << lesson << endl; }
Передача строк в функцию
Передача символьной строки в функцию подобна передаче любого массива в качестве параметра. Внутри функции вам нужно просто указать тип массива (char) и левую и правую скобки массива. Вам не надо указывать размер строки. Например, следующая программа использует функцию show_string для вывода символьной строки на экран:
#include <iostream.h>
void show_string(char string[])
{ cout << string << endl; }
void main(void)
{ show_string("Привет, C++!"); show_string("Учусь программировать на C++"); }
Так как символ NULL указывает конец строки, функция не требует параметр, который задает количество элементов в массиве. Вместо этого функция может определить последний элемент, просто найдя в массиве символ NULL.
Вычисление длины строки
Известно, что символ NULL рассматривается в функциях Си обычно как символ, обозначающий конец строки. Такие функции, как fgets и cgets, присваивают символ NULL автоматически. В следующей программе SHOW_STR.C функция sets используется для чтения строки символов с клавиатуры, -затем с помощью цикла for выполняется посимвольный вывод содержимого строки до тех пор, пока не будет обнаружен символ NULL:
#include <stdio.h>
void main (void)
{
char string[256]; // Строка для ввода пользователя
int i; // Индекс в строке
printf("Введите строку символов и нажмите Enter:\n");
gets(string);
for (i = 0; string[i] != NULL; i++) putchar(string[i]);
printf("\nЧисло символов в строке равно %d\n", i);
}
При работе программы со строками многие из выполняемых операций базируются на количестве символов в строке. Для определения в программе количества символов строки большинство Си-компиляторов предоставляет функцию strlen, которая возвращает число символов в заданной строке. Функция strlen имеет следующий формат:
#include <string.h>
size_t strlen(const char string);
В следующей программе демонстрируется использование strlen:
#include <stdio.h>
#include <string.h>
void main(void)
{
char book_title[] = "1001 совет по C/C++";
printf("%s содержит %d символов\n",
book_title, strlen (book_title));
}
Копирование символьных строк
При работе со строками часто возникает потребность в копировании одной символьной строки в другую. Для выполнения этой операции большинство Си-компиляторов предоставляет функцию strcpy, с помощью которой символы одной строки (строка-источник) копируются в другую строку (строку-цель):
#include <string.h>
char *strcpy(char *destination, const char *source);
В качестве результата функция strcpy возвращает указатель на начало целевой строки. В следующей программе STRCPY.C демонстрируется использование функции strcpy:
#include <stdio.h>
#include <string.h>
void main(void)
{
char title[] = "1001 совет по C/C++";
char book[128];
strcpy(book, title);
printf("Название книги %s\n", book);
}