Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Alg1.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
101.84 Кб
Скачать

22. Понятие символа и строки. Используемые типы данных.

Символ – элементарная единица, некоторый набор которых несет определенный смысл. В языке программирования С++ предусмотрено использование символьных констант. Символьная константа – это целочисленное значение (типа int) представленное в виде символа, заключённого в одинарные кавычки, например 'a'. В таблице ASCII представлены символы и их целочисленные значения.

// объявления символьной переменной

char symbol = 'a';

// где symbol – имя переменной типа char

// char – тип данных для хранения символов

Строки в С++ представляются как массивы элементов типа char, заканчивающиеся нуль-терминатором \0 называются С строками или строками в стиле С.

Символьные строки состоят из набора символьных констант заключённых в двойные кавычки. При объявлении строкового массива необходимо учитывать наличие в конце строки нуль-терминатора, и отводить дополнительный байт под него.

Строка при объявлении может быть инициализирована начальным значением, например, так:

char string[10] = "abcdefghf";

При объявлении строки не обязательно указывать её размер, но при этом обязательно нужно её инициализировать начальным значением.

//инициализация строки без указания размера

char string[] = "abcdefghf";

//всё то же самое только размер не указываем.

23. Массивы символов. Инициализация символьных массивов.

Для инициализации символьной строки при объявлении укажите требуемую строку внутри двойных кавычек, как показано ниже:

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;

}

24. Работа со строками без использования массивов. Функция malloc().

Прототип функции malloc:

void * malloc( size_t sizemem );

Подключать нужно cstdlib

Функция malloc выделяет блок памяти, размером sizemem байт, и возвращает указатель на начало блока.

Содержание выделенного блока памяти не инициализируется, оно остается с неопределенными значениями.

Возвращаемое значение. Указатель на выделенный блок памяти. Тип данных на который ссылается указатель всегда void*, поэтому это тип данных может быть приведен к желаемому типом данных.

Если функции не удалось выделить требуемый блок памяти, возвращается нулевой указатель.

25. Ввод строк с клавиатуры. Функции gets() и scanf().

Функция gets() читает строку символов, введенных с клавиатуры и помещает их по адресу, указанному в аргументе. Можно набирать символы, пока не будет нажат ввод. Символ, соответствующий клавише ввод - возврат каретки, - не станет частью строки. Вместо этого в конце строки появится нулевой символ, и gets() закончит работу. Фактически невозможно использовать gets() для получения возврата каретки (можно использовать getchar() и ее варианты). Если при вводе допущены ошибки, то они могут быть исправлены нажатием на клавишу BACKSPASE перед нажатием ввода.

//пример использования функции gets

#include <iostream>

#include <cstdio>

int main()

{

char string [256];

std::cout << "Введите свой полный адрес: ";

gets(string); // считать строку из стандартного потока ввода

std::cout << "Ваш адрес: " << string;

return 0;

}

Имеется проблема, связанная с gets(), о которой следует знать: используя gets(), можно перейти границы массива, с которым она вызывалась. Это возможно, поскольку не существует способа указать gets(), где находится граница массива. Например, если вызвать gets() с массивом длиной в 40 байт, а затем ввести 40 или более символов, то произойдет выход за пределы массива. Это, естественно, вызывает проблемы и часто может привести к краху системы. В качестве альтернативы можно использовать функцию fgets() (описываемую далее), которая позволяет указать максимальную длину. Единственная проблема, связанная с fgets(), заключается в том, что она сохраняет символ новой строки. Если этот символ не нужен, то следует удалить его вручную. Возможно, в будущем будет осуществлена замена gets(), но на сегодняшний день данная функция предоставляет самый легкий способ чтения строки с клавиатуры, надо просто быть внимательным.

Функция scanf() - функция форматированного ввода. С её помощью вы можете вводить данные со стандартного устройства ввода (клавиатуры). Вводимыми данными могут быть целые числа, числа с плавающей запятой, символы, строки и указатели.

Функция scanf() имеет следующий прототип в файле stdio.h:

int scanf(char *управляющая строка);

Функция возвращает число переменных которым было присвоено значение.

Управляющая строка содержит три вида символов: спецификаторы формата, пробелы и другие символы. Спецификаторы формата начинаются с символа %.

Спецификаторы формата:%c чтение символа

%d чтение десятичного целого

%i чтение десятичного целого

%e чтение числа типа float (плавающая запятая)

%h чтение short int

%o чтение восьмеричного числа

%s чтение строки

%x чтение шестнадцатеричного числа

%p чтение указателя

%n чтение указателя в увеличенном формате

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]