Явные преобразования типов при помощи операции приведения типа.

Как вы видели, компилятор С и C++ автоматически меняет формат переменной при выполнении смешанных операций, в которых задействуются различные типы данных. Однако, в некоторых случаях, несмотря на то, что автоматическое преобразование не выполняется, преобразование типов было бы желательным. В таких случаях необходимо особо указать, что требуется изменение типа. Кроме того, подобные явные указания облегчают другим программистам понимание используемых операторов. В языке С имеется несколько процедур, позволяющих указывать необходимость преобразования типа.

Одна из таких процедур называется приведением типа. Если нужно временно изменить формат некоторой переменной, достаточно перед ее именем указать в скобках имя типа, который необходимо получить. Например: если переменные ivalue1 и ivalue2 объявлены как int, а переменные fvalue и fresult как float, то три следующих оператора будут эквивалентны:

fresult = fvalue + (float)ivalue1/ivalue2;

fresult = fvalue + ivalue1/(float)ivalue2;

fresult = fvalue + (float)ivalue1/(float)ivalue2;

Все три оператора выполняют преобразование в тип с плавающей точкой и деление переменных ivalue1 и ivalue2. Если любая из этих переменных приведена в тип float, то — согласно описанным выше правилам стандартного преобразования типов в смешанных арифметических операциях — выполняется деление чисел с плавающей точкой. Третий оператор явно указывает, какие операции должны выполняться.

44. Символьные строки. Массивы символов в C++ Функции работы со строками символов.

Символьные строки.

«Символьная строка» — это последовательность, состоящая из одного или более символов. В качестве примера рассмотрим следующую строку:

"Строки изливались прямо из сердца!"

Кавычки не являются частью строки. Они вводятся только для того, чтобы отметить ее начало и конец, т. е. играют ту же роль, что и апострофы в случае одиночного символа.

В языке Си нет специального типа, который можно было бы использовать для описания строк. Вместо этого строки представляются в виде «массива» элементов типа char.

 

 

Необходимо отметить, что на рисунке последним элементом массива является символ \0. Это «нуль-символ», и в языке Си он используется для того, чтобы отмечать конец строки.

Ну, а теперь спросим, что такое массив? Массив можно представить себе как совокупность нескольких ячеек памяти, объединенных в одну строку. Если вы предпочитаете более формальные и строгие определения, то массив — это упорядоченная последовательность элементов данных одного типа.

char name [40];

Квадратные скобки указывают, что переменная name — массив, 40 — число его элементов, a char задает тип каждого элемента.

Библиотека С++ содержит функции копирования строк (strcpy, strncpy), сравнения (strcmp, strncmp), объединения строк (strcat, strncat), поиска подстроки (strstr), поиска вхождения символа (strchr, strnchr, strbrk) определения длины строки strlen и другие.

45. Символьные строки. Определение длины строк Копирование и конкатенация строк Сравнение строк Преобразование строк

Функция Пояснение
strlen (имя_строки) определяет длину указанной строки, без учёта нуль-символа

Копирование строк

strcpy (s1,s2) выполняет побайтное копирование символов из строки s2 в строку s1
strncpy (s1,s2, n) выполняет побайтное копирование n символов из строки s2 в строку s1. возвращает значения s1

Объединение строк

strcat(s1,s2) объединяет строку s2 со строкой s1. Результат сохраняется в s1
strncat(s1,s2,n) объединяет n символов строки s2 со строкой s1. Результат сохраняется в s1

Сравнение строк

strcmp(s1,s2) сравнивает строку s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1<s2, <0 — если s1>s2 С учётом регистра
strncmp(s1,s2) сравнивает n символов строки s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1<s2, <0 — если s1>s2 С учётом регистра
stricmp(s1,s2) сравнивает строку s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1<s2, <0 — если s1>s2 Без учёта регистра
strnicmp(s1,s2) сравнивает n символов строки s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1<s2, <0 — если s1>s2 Без учёта регистра

Функции преобразования

atof(s1) преобразует строку s1 в тип double
atoi(s1) преобразует строку s1 в тип int
atol(s1) преобразует строку s1 в тип long int

 

46.Символьные строки. Обращение строк Поиск символов Поиск подстрок

Функция обращения строки strrev() меняет порядок следования символов на обратный (реверс строки). Данная функция имеет прототип:

char* strrev(char* str)

Следующий пример демонстрирует работу функции strrev().

char str[]—" Привет "; cout « strrev(str);

В результате на экране будет выведена строка "тевирП". Эта функция также преобразует строку-оригинал.