Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
Топ:
Оценка эффективности инструментов коммуникационной политики: Внешние коммуникации - обмен информацией между организацией и её внешней средой...
Марксистская теория происхождения государства: По мнению Маркса и Энгельса, в основе развития общества, происходящих в нем изменений лежит...
Проблема типологии научных революций: Глобальные научные революции и типы научной рациональности...
Интересное:
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Финансовый рынок и его значение в управлении денежными потоками на современном этапе: любому предприятию для расширения производства и увеличения прибыли нужны...
Дисциплины:
2020-08-21 | 258 |
5.00
из
|
Заказать работу |
|
|
# include < ctype. h>
Функции данной группы можно использовать для проверки принадлежности символа множеству букв, разделителей, знаков пунктуации, цифр и т.д.
прототип | описание функции |
int isdigit (int c) | возвращает отличное от 0 значение, если элемент с является цифрой, в противном случае – 0 |
int isalfa (int c) | возвращает отличное от 0 значение, если элемент с является буквой, в противном случае – 0 |
int isalnum (int c) | возвращает отличное от 0 значение, если элемент с является цифрой или буквой, в противном случае – 0 |
int isxdigit (int c) | возвращает отличное от 0 значение, если элемент с является 16-ичной цифрой, в противном случае – 0 |
int islower (int c) | возвращает отличное от 0 значение, если элемент с является строчной буквой (нижний регистр), в противном случае – 0 |
int isupper(int c) | возвращает отличное от 0 значение, если элемент с является прописной буквой (верхний регистр), в противном случае – 0 |
int isspace (int c) | возвращает отличное от 0 значение, если элемент с является разделителем: переход на новую строку (‘\n’), пробел (‘ ‘), переход на новую страницу (‘\f’), горизонтальная табуляция (‘\t’), вертикальная табуляция (‘\v’), в противном случае – 0 |
int iscntrl (int c) | возвращает отличное от 0 значение, если элемент с является управляющим символом (с кодами 0-31, 127), в противном случае – 0 |
int ispunct (int c) | возвращает отличное от 0 значение, если элемент с является символом пунктуации, отличным от пробела, цифры или буквы, в противном случае – 0 |
int isprint (int c) | возвращает отличное от 0 значение, если элемент с является любым печатным символом, включая пробел, в противном случае – 0 |
int isgraph (int c) | возвращает отличное от 0 значение, если элемент с является печатным символом, отличным от пробела, в противном случае – 0 |
|
Приведенный ниже оператор позволяет выдать на экран символ и его код:
cout << ch << " = " << ch+0 << endl; (преобразование типа к целому)
Поиск строки в строке
Функция char * strstr (char *s1, const char *search)
выполняет поиск строки search в строке s1 и возвращает указатель на первое вхождение search в строку s1. Если строка не обнаружена, то возвращается указатель NULL.
const int MAX = 80;
char s1[MAX]="abcdef", s2[MAX]="cd";
char * s = strstr(s1, s2);
if (s) cout<<" n =" << int(s-s1) << endl; //n=2 - позиция строки
Функция size_t strspn (const char *s1, const char * charSet)
определяет и возвращает длину начальной части строки s1, состоящей только из символов, содержащихся в строке charSet. 0-символ в сравнении не участвует.
const int MAX = 80;
char s1[MAX]="abcdef", s2[MAX]="aabb";
size_t n = strspn(s1, s2); //2
Функция size_t strcspn (char *s1, const char *charSet)
определяет и возвращает длину начальной части строки s1, состоящей из символов, не содержащихся в строке charSet. 0-символ в сравнении не участвует. Если строка s1 начинается с символа, встречающегося в строке charSet, возвращается нуль. Если строка s1 не содержит ни одного символа строки charSet, возвращаемое значение совпадает с длиной строки s1.
const int MAX = 80;
char s1[MAX]="abcdef", s2[MAX]="aabb";
size_t n = strcspn(s1, s2); //0
Функция char * strpbrk (char *s1, const char *s2)
возвращает указатель на символ, являющийся первым вхождением любого из символов строки s2 в строку s1. Если символ не найден, то возвращается указатель NULL.
const int MAX = 80;
char s1[MAX]="abcdef", s2[MAX]="cf";
char *s= strpbrk(s1, s2);
cout << int(s-s1) << endl; //2
Преобразование и заполнение строк
(< stdlib. h>, <с stdlib>)
преобразование строки в число
Преобразуемая в число строка может содержать:
· последовательность цифр;
· запись вещественного числа в форме с фиксированной точкой или в экспоненциальной форме (с наличием десятичной точки, цифр порядка и символов е или Е, например, 12.345Е- 2);
· символы пробела, табуляции, знака числа.
|
Признаком конца записи числа в преобразуемой строке является первый символ, который не может быть интерпретирован как символ числа соответствующего типа.
Функция double atof (char *s)
преобразует строку s, содержащую символьное представление вещественного числа, в соответствующее десятичное вещественное число; признаком конца числа служит первый символ, который не может быть интерпретирован как принадлежащий числу.
char st[10]=" 1.2e02. ";
double d = atof(st);
cout<<d<<endl; //120
Функция int atoi (char *s)
преобразует строку s, содержащую символьное представление целого числа, в соответствующее десятичное целое число; признаком конца числа служит первый символ, который не может быть интерпретирован как принадлежащий числу.
char st[10]="125.";
int d = atoi(st);
cout<<d<<endl; //125
Функция long atol (char *s)
преобразует строку s, содержащую символьное представление целого числа, в соответствующее десятичное длинное целое число; признаком конца числа служит первый символ, который не может быть интерпретирован как принадлежащий числу.
char st[10]="1234567 a a";
long d = atoi(st);
cout<<d<<endl; //1234567
Функция long strtol (const char *s, char **endptr, int base)
преобразует строку s, содержащую символьное представление целого числа, в соответствующее десятичное длинное целое число в системе счисления base; признаком конца числа служит первый символ строки endptr, который не может быть интерпретирован как принадлежащий числу.
#include <stdlib.h>
int main()
{
const int MAX = 80;
char str[MAX] = "a";
char *endptr;
long il;
il = strtol(str, &endptr, 2);
cout<<il<< " "<<endptr <<endl; // 0 a, а является ошибочным символом в 10 с/с
cout<<endl;
il = strtol(str, &endptr, 16);
cout<<il<< " "<<endptr <<endl; //10
_getch();
return 0;
}
Функция double strtod (const char *s, char **endptr)
преобразует строку s, содержащую символьное представление вещественного числа, в соответствующее десятичное вещественное число; признаком конца числа служит первый символ строки endptr, который не может быть интерпретирован как принадлежащий числу.
#include <stdlib.h>
int main()
{
const int MAX = 80;
char str[MAX]="3.1415", str1[MAX]="3.1415e+00",str2[MAX]="3.14 # 00";
char *endptr;
double d;
d = strtod(str, &endptr);
cout<<d<<" " << endptr<<endl; //3.1415
|
d = strtod(str1, &endptr);
cout<<d<<" " << endptr<<endl; //3.1415
d = strtod(str2, &endptr);
cout<<d<<" " << endptr<<endl; //3.14 # 00
_getch();
return 0;
}
преобразование числа в строку
Функция char * itoa (int i, char *s, int c)
преобразует целое i (переведенное в с/с 2< c <36) в строку s; c – основание системы счисления.
char st[10]="";
int i = 120;
itoa(i, st, 10); // warning C4996: 'itoa' was declared deprecated
cout<<st<<endl; //120
itoa(i, st, 16); // warning C4996: 'itoa' was declared deprecated
cout<<st<<endl; //78
itoa(i, st, 2); // warning C4996: 'itoa' was declared deprecated
cout<<st<<endl; //1111000
Функция errno_t _itoa_s (int value, char * buffer, size_t sizeInCharacters, int radix);
Возвращает 0 при успешном завершении и код ошибки – в противном случае.
char st[10]="";
int i = 120;
_itoa_s (i, st,10, 10);
cout<<st<<endl; //120
_itoa_s (i, st,10, 16);
cout<< st<<endl; //78
_itoa_s (i, st,10, 2);
cout<< st<<endl; //1111000
Шаблонная функция (только в С++)
template <size_t size>
errno_t _itoa_s (int value, char (*buffer)[ size], int radix);
позволяет вызывать функцию в привычном виде:
char st[10]="";
int i = 120;
_itoa_s (i, st, 10);
cout<<st<<endl; //120
_itoa_s (i, st, 16);
cout<<st<<endl; //78
_itoa_s (i, st, 2);
cout<<st<<endl; //1111000
Функция char * ltoa (long il, char *s, int c)
преобразует длинное целое il (переведенное в с/с 2< c <36) в строку s; c – основание системы счисления (2<c<36) (аналогично i toa()).
Функция char * ultoa (unsigned long ul, char *s, int c)
преобразует беззнаковое длинное целое ul (переведенное в с/с 2< c <36) в строку s;
c – основание системы счисления (2<c<36) (аналогично i toa() и ltoa()).
Функция char * fcvt (double value, int count, int * dec, int * sign)
возвращает строку, в которую преобразует вещественное число value, для которого задано количество цифр в дробной части строкового представления(count); функция возвращает такжеколичество цифр в целой части (dec), и знак числа (sign).
int drob=5, celoe, sign;
char *stroka;
double d=3.141592;
stroka = fcvt(d, drob, &celoe, &sign);
// warning C4996: 'fcvt' was declared deprecated
cout<< stroka <<" "<< celoe<<" "<< sign<<endl; //314159 1 0
Функция errno_t _ fcvt _s (char * buffer, size_t sizeIn Bytes, double value, int count,
int * dec, int * sign)
|
возвращает 0 при успешном завершении и код ошибки – в противном случае.
int drob=5, celoe, sign;
char stroka[20];
double d=3.141592;
_fcvt_s (stroka, 20, d, drob, &celoe, &sign);
cout<< stroka <<" "<< celoe<<" "<< sign<<endl; //314159 1 0
Шаблонная функция (только в С++)
template <size_t size>
errno_t _fcvt_s (char (*buffer)[ size], double value, int count, int * dec, int * sign)
позволяет вызывать функцию в виде:
int drob=5, celoe, sign;
char stroka[20];
double d=3.141592;
_fcvt_s (stroka, d, drob, &celoe, &sign);
cout<< stroka <<" "<< celoe<<" "<< sign<<endl; //314159 1 0
преобразование строчных символов строки в прописные и наоборот
int tolower (int c) | преобразует прописные латинские буквы в строчные |
int toupper (int c) | преобразует строчные латинские буквы в прописные |
Функция char * strupr (char *s)
преобразует все символы строчных букв строки s в символы прописных букв и возвращает указатель на ее начало.
const int MAX = 80;
char str[MAX]="abcdef";
char * s;
s = strupr(str); // warning C4996: 'strupr' was declared deprecated
cout<<s<<endl; //ABCDEF
Функция errno_t _strupr_s (char * str, size_t sizeIn Bytes)
возвращает 0 при успешном завершении и код ошибки – в противном случае.
const int MAX = 80;
char str[MAX]="abcdef";
_strupr_s(str, MAX);
cout<<str<<endl; //ABCDEF
Шаблонная функция (только в С++)
template <size_t size>
errno_t _strupr_s (char (*str)[ size])
позволяет вызывать функцию в виде:
const int MAX = 80;
char str[MAX]="abcdef";
_strupr_s(str);
cout<<str<<endl; //ABCDEF
Функция char * strlwr (char *s)
преобразует все символы прописных букв строки s в символы строчных букв и возвращает указатель на ее начало.
const int MAX = 80;
char str [MAX]="ABCDEFG";
char * s;
s = strlwr(str); // warning C4996: 'strlwr' was declared deprecated
cout<<s<<endl; //abcdefg
Функция errno_t _strlwr_s (char * str, size_t sizeIn Bytes);
возвращает 0 при успешном завершении и код ошибки – в противном случае.
const int MAX = 80;
char str [MAX]="ABCDEFG";
_strlwr_s(str,MAX);
cout<<str<<endl; //abcdefg
Шаблонная функция (только в С++)
template <size_t size>
errno_t _strlwr_s (char (*str)[ size]);
позволяет вызывать функцию в виде:
const int MAX = 80;
char str [MAX]="ABCDEFG";
_strlwr_s(str);
cout<<str<<endl; //abcdefg
Реверс строки
Функция char * strrev (char *s)
возвращает указатель на начало строки, полученной в результате реверса строки s.
Заполнение строки символом
Функция char * strset (char *s, int ch)
помещает символ ch во все позиции строки s.
пример применения функций преобразования
//пример_5
#include <cstdlib>
int main()
{
char a[ ] = "10) rost – 162 cm, ves – 59.5 kg";
int num;
long rost;
double ves;
num = atoi(a); //преобразование, начиная с символа 1 с индексом 0 и до символа ‘)’
rost = atol (&a[11]); //преобразование, начиная с символа 1 с индексом 11 и до ‘пробела’
|
ves = atof (&a[25]); //преобразование, начиная с символа 5 с индексом 25 и до ‘пробела’
cout << num << " " << rost << " " << ves; //10 162 59.5
_getch();
return 0;
}
Выделение лексем
Функция char * strtok (char *s1, const char *s2)
позволяет разбить строку на лексемы (слова, предложения). Она возвращает из строки следующую лексему, отделенную любым разделителем (пробел, точка с запятой, дефис), и указатель, ссылающийся на следующий символ, начиная с которого должен осуществляться поиск следующей лексемы:
#include <string.h>
int main()
{ char string[ ] = "this sentence;has-5words.";
char *tokenPtr;
cout << string << endl << "by the words:" << endl;
tokenPtr = strtok (string, ";-."); //пробел,;, -,. – разделители
while (tokenPtr!=NULL)
{cout << tokenPtr << endl;
tokenPtr = strtok (NULL,";-."); //при последующем вызове
//нулевой указатель передается в качестве первого параметра
}
_getch();
return 0;
}
Вызов tokenPtr = strtok (NULL,";-."); трактуется так, будто первый аргумент указывает на символ, следующий непосредственно после 0-символа, записанного в строку stringпосле первого выделения лексемы. Таким образом, в нашем примере, после выделения первого слова указатель token содержит адрес первого символа еще не просмотренной части строки. После просмотра всей строки он будет указывать на символ-разделитель в конце строки (‘.’).
Очевидно, что при включении в список разделителей символов, завершающих предложение (.!?), мы получим выделение в качестве лексем – предложений, а при включении в список разделителей символов, разделяющих слова (пробел.,; –), мы получим выделение в качестве лексем – слов.
Внимание!!! Функция strtok изменяет строку, разбиваемую на лексемы, поэтому при необходимости дальнейшего использования строки необходимо позаботиться о ее предварительном сохранении.
Работа с блоками памяти
# include <string. h>
# include <mem.h>
прототип | описание функции |
void *memccpy (void *dest, const void *src, int c, size_t n) | копирует блок памяти из буфера-источника src в буфер dest, пока общее число перенесенных байтов не достигнет значения n или пока не встретится в src байт, содержащий символ c |
void *memchr (const void *s, int c, size_t n) | возвращает указатель на символ c, найденный при просмотре n байтов буфера s; если символ не найден, возвращается NULL |
int memcmp (const void *s1, const void *s2, size_t n) | сравнивает n первых байтов буферов s1 и s2 (байты трактуются как символы); возвращает значение, меньшее нуля, если s1 < s2; равное нулю, если s1= s2; большее нуля, если s1 > s2 |
int memicmp (const void *s1, const void *s2, size_t n) | сравнивает n первых байтов буферов s1 и s2 (байты трактуются как символы, преобразованные в строчные буквы); возвращает значение, меньшее нуля, если s1 < s2; равное нулю, если s1= s2; большее нуля, если s1 > s2 |
void *memcpy (void *dest, const void *src, size_t n) | копирует n байтов из буфера-источника src в буфер-назначение dest; буферы не должны перекрываться в памяти; возвращает указатель на dest |
void *memmove (void *dest, const void *src, size_t n) | копирует n байтов из буфера-источника src в буфер-назначение dest; буферы могут перекрываться в памяти; возвращает указатель на dest |
void *memset (void *s, int c, size_t n) | устанавливает n байтов буфера s в заданное значение c; возвращается указатель на буфер s |
Динамические строки
Память под строки, как и под другие массивы, может выделяться как компилятором, так и непосредственно в программе. Как мы видели, длина статической строки должна быть только константным выражением. Чаще всего она задается именованной константой (как частным случаем константного выражения). Длина динамической строки может задаваться выражением, вычисляемым в ходе выполнения программы.
Для размещения строки в динамической памяти описываем указатель на char и выделяем память с помощью new или malloc.
char *p = new char [m];
char *q = (char *) malloc(m*sizeof(char));
|
|
Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!