Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Функции работы со строками и символами




Строка представляет собой массив символов, заканчивающийся нуль-символом. В С++ есть две возможности работы со строками: функции, унаследованные из библиотеки С (заголовочный файл <string.h> или <cstring>), и библиотечный класс С++ string.

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

char *strcat (char *s1, char *s2);

добавляет s2 к s1 и возвращает s1. В конец результирующей строки добавляется нуль-символ.

char *strchr (char *s, int ch);

возвращает указатель на первое вхождение символа ch в строку s, если его нет, возвращает NULL.

int *strcmp (char *s1, char *s2);

сравнивает строки s1и s2 и возвращает отрицательное (если s1<s2), нулевое (s1=s2) или положительное значение (s1>s2).

char *strcpy (char *s1, char *s2);

копирует s2 в s1и возвращает s1.

size_t strlen(char*s);

возвращает длину строки(без завершающего символа).

char *strncat (char *s1, char *s2, size_t n);

добавляет не более n символов из s2 к s1 и возвращает s1.

int strncmp (char *s1, char *s2, size_t n);

сравнивает s1 и первые n символов строки s1. Возвращает такие же значения, что и strcmp.

char *strncpy (char *s1, char *s2, size_t n);

коприрует не более n символов из s2 в s1 и возвращает s1. Если длина исходной строки s2 превышает n или равна ему, нуль-символ в конец строки s1 не добавляется. В противном случае строка дополняется нуль-символами до n-го символа.

char *strchr (char *s, int ch);

возвращает указатель на первое вхождение символа ch в s справа, если его нет, возвращает NULL.

char *strstr (char *s1, char *s2);

выполняет поиск первого вхождения подстроки s2 в s1. В случае удачного поиска возвращает указатель на элемент из s1, с которого начинается s2, и NULL − в противном случае.

double strtod (const char *str, char **end);

преобразует строку символов в числовое значение и возвращает его. При переполнении возвращает +/-HUGE_VAL. При невозможности выполнить преобразование или исчезновении порядка возвращает 0. В обоих последних случаях end указывает на символ, на котором преобразование завершается.

В заголовочном файлe <stdlib.h> содержатся полезные функции преобразования строк в числа:

double atof (const char *p);

преобразует переданную строку в double.

int atoi (const char *p);

преобразует переданную строку в int.

long atol (const char *p);

преобразует переданную строку в long.

Пробелы и табуляции в начале строки пропускаются. Преобразование прекращается при встрече недопустимого символа или конца строки. Если строку нельзя преобразовать в число, возвращается 0. Если число выходит за пределы диапазона данного типа, переменной errno (заголовочный файл <cerrno>) присваивается значение ERANGE и возвращается допустимое число.

Обратные преобразования можно сделать с помощью функции sprintf:

int sprintf (char *buffer, const char *format [, argument,...]);

выводит в строку buffer значения переменных, перечисленных в списке, в формате, определенном строкой format.

Для работы с символами в стандартной библиотеке (заголовочный файл <ctype.h>) есть следующие функции:

Имя функции Проверка на принадлежность символа множеству
isalpha букв (A-Z, a-z, 0-9)
isalnum букв и цифр(A-Z, a-z, 0-9)
isdigit цифр (0-9)
isxdigit шестнадцатеричных цифр (0-9, A−F, a−f)
iscntrl управляющих символов (с кодами 0..31 и 127)
islower букв нижнего регистра (a-z)
isupper букв верхнего регистра (A-Z)
isgraph печатаемых символов, кроме пробела
ispunct знаков пунктуации
isprint печатаемых символов
isspace символов-разделителей

 

Функции принимают величину типа int и возвращают результат true, если условие выполняется.

Следующие функции переводят символ ch в нижний и верхний регистр соответственно:

int tolower (int ch);

int to upper (int ch);

 

 

Задание

Написать программу – “Текстовый редактор”. Предусмотреть следующие функции:

- просмотр текста;

- добавление новых строк;

- редактирование строк;

- удаление строк.

Математические функции

С++ унаследовал из С стандартные математические функции, описание которых находится в заголовочном файле <math.h> (<cmath>). Они позволяют получить абсолютное значение (abs, fabs), округленное число (ceil, floor), квадратный корень (sqrt), степень (pow), значения тригонометрических функций (sin, cos, tan, asin, acos, atan и др.), экспоненту (exp), логарифм (log, log10), дробную и целую части числа (modf), остаток от деления (fmod) и ряд других.

Ошибки индицируются установкой errno из <errno.h> в значение EDOM для ошибок из области определения и ERANGE для ошибок выхода за пределы определения.

Функции

int abs (int num);

long labs(long int num);

double fabs(double x);

возвращают модуль целого и дробного числа соответственно.

Функции

double acos(double x);

double asin(double x);

double atan(double x);

double atan2(double x);

возвращают значение арккосинуса, арксинуса, арктангенса и арккотангенса соответственно. Значение возвращается в радианах.

double cos(double x);

double sin(double x);

double tan(double x);

double tan2(double x);

возвращают косинус, синус, тангенс, котангенс аргумента, заданного в радианах.

div_t div (int numerator, int denomerator);

делит целое numerator на целое denomerator, возвращая результат в структуре, содержащей частное от деления и остаток:

struct div_t {

int quot;

int rem;

}

double exp(double x);

возвращает результат возведения е в степень х.

double floor (double x);

округляет вещественное число х до ближайшего меньшего целого и возвращает его как вещественное число.

double log (double x);

double log10 (double x);

возвращают значение натурального и десятичного логарифмов соответственно.

double modf (double x, double *intptr);

разбивает х на целую и дробную части, причем дробную часть числа возвращает, а целую часть числа помещает по адресу, определяемому указателем intptr.

double pow (double x, double y);

вычисляет степень х основания у.

int rand(void);

генерирует случайное число в диапазоне от 0 до RAND_MAX (константа описана в <stdlib.h>.

double sqrt(double x);

возвращает квадратный корень из х.

Задание

Написать программу, моделирующую игру в кости.


 

Директивы препроцессора

Препроцессором называется первая фаза компиляции. Инструкции препроцессора называются директивами. Они должны начинаться с символа #.

Директива #include

Директива #include <имя файла> вставляет содержимое указанного файла в ту точку исходного файла, где она записана. Включаемый файл также может содержать директивы #include. Вместо угловых скобок можно использовать двойные кавычки, тогда можно указывать полный путь к файлу.

Директива #include является простейшим средством согласованности объявлений в различных файлах, она включает в них информацию об интерфейсе из заголовочных файлов.

Заголовочные файлы имеют расширение.h и могут содержать:

- определения типов, констант, встроенных функций, шаблонов, перечислений;

- объявления функций, данных, имен, шаблонов;

- пространства имен (см. далее);

- директивы препроцессора;

- комментарии.

В заголовочном файле не должно быть определений функций и данных. Эти правила отражают не требования языка, а разумный подход использования директивы.

При указании заголовочных файлов стандартной библиотеки расширение.h можно опускать. Для каждого файла библиотеки С с именем <name.h> имеется соответствующий файл библиотеки С++ с именем <сname>, в котором те же средства описываются в пространстве имен std (см. далее).

Директива #define

Данная директива определяет подстановку в тексте программы. Она используется для определения:

- символических констант:

#define имя текст_подстановки;

- макросов, которые выглядят как функции, но реализуются подстановкой их текста в текст программы:

#define имя(параметры) текст_подстановки;

- символов, управляющих условной компиляцией. Эти символы используются вместе с директивами #ifdef #ifndef. Формат:

#define имя;

Примеры

#define VASIA "Василий"

#define MAX(x,y) ((x)>(y)? (x): (y))

Имена рекомендуется писать большими буквами, чтобы зрительно отличать их от имен переменных и функций. С макросом работают как с обычной функцией, например, макрос MAX может быть вызван как y=MAX(sum1,sum2); в тексте программы он будет заменен на выражение y= ((sum1)>(sum2)? (sum1): (sum2));

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





Поделиться с друзьями:


Дата добавления: 2016-10-06; Мы поможем в написании ваших работ!; просмотров: 475 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Наглость – это ругаться с преподавателем по поводу четверки, хотя перед экзаменом уверен, что не знаешь даже на два. © Неизвестно
==> читать все изречения...

2613 - | 2186 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.