Одним из преимуществ "новых" языков программирования (таких как "Паскаль", "Си") является появление "пользовательских" типов данных. В языке Си к таким данным относят структуры, объединения и перечисления. Рассмотрим их поподробнее.
Структура представляет собой несколько типов данных, расположенных вместе, в соседних ячейках памяти. Структура имеет собственное имя как тип данных, длина ее элемента (в памяти компьютера) вычисляется с помощью функции sizeof (в C и C++). Пример структуры следующий:
[Пример 01]
/* Инициализируем константу */
const unsigned short MAXSTRINGLENGTH = 256;
/* Описание структуры stringz */
struct stringz
{
char string[MAXSTRINGLENGTH];
short nLength;
}
Здесь определена структура с именем stringz, содержащая в себе массив string длиной MAXSTRINGLENGTH (в нашем случае - это 256 символов), и целым числом длиной 2 байта nLength, в котором может, например, храниться реальная длина строки.
Объединение
Объединение похоже на структуру, но в ней данные хранятся не вместе друг с другом, а вместо друг друга. Например, в следующем объединении с тегом data:
[Пример 02]
/* Объявление константы
const unsigned short STRDATALENGTH = 32:
/* Объявление объединения
union data{
long intdata;
double doubledata;
char strdata[STRDATALENGTH];
}
Может храниться либо длинное целое, либо данные с плавающей точкой, либо массив-строка символов длиной 32 байта, причем все - в одних и тех же ячейках памяти. Функция sizeof, примененная к объединению, выдает значение самого длинного типа данных в объединении.
Обращение к элементам структуры и объединения осуществляется либо через знак "." (для переменной), либо знаком "->" (для указателей). Например:
[Пример 03]
/* Инициализируем константу */ const unsigned short MAXSTRINGLENGTH = 256; /* Объявление переменных */ struct stringz aString, *theString; union data aData, *theData; /* Присвоение значений переменным */ aString.nLength = 5; memset(theString -> string, '\0', MAXSTRINGLENGTH); aData.intdata = 1; theData -> doubledata = 7.0;
Перечисления иногда называют именованными типами данных. Их объявление на языке Си следующее:
enum <тег> {<константа 0>, <константа 1>, ... <константа n>};
Например:
[Пример 04]
/* определяет булевский тип данных */
enum boolean {FALSE, TRUE}
Переменные типа "перечисление" представляют собой целые переменные без знака, способные принимать значения только из списка: <константа 0> ... <константа n>, причем первой константе соответствует значение "0".
Переменную перечисления в Си можно привести к целому типу. Обратное действие вызывает неопределенность.
Если Ваш язык не поддерживает перечисления, можно определить целые константы, соответствующие перечислению, и определить целую переменную, которая будет работать только с этими константами. Но это уже должен отслеживать программист, то есть Вы.
[Пример 05]
stringZ$ = "Привет!" stringZ% = 7
В этом примере вместо структуры stringz в языке Quick Basic используются переменные stringZ$ (для хранения символьных данных) и stringZ% для хранения целого числа.
К составным специальным
В примерах [06 - 08] дается реализация алгоритмов Примера 01 лекции 6 с помощью классов "
_T(...). В компиляторе Java 2 нет специальной функции для перевода 8-ми битных кодировок в Unicode.[Пример 06]
// Определение переменной: <имярек>.
CString strImyaRek("Света");
// Определение переменной-результата.
Cstring strResult();
// Символьные вычисления.
strResult = _T("Привет ") + strImyaRek + _T("! С добрым утром.");
[Пример 07]
// Определение переменной: <имярек>.
string strImyaRek("Света");
// Определение переменной-результата.
string strResult();
// Символьные вычисления.
strResult.append("Привет ");
strResult += strImyaRek;
strResult.append("! С добрым утром.");
[Пример 08]
// Определение переменной: <имярек>.
String strImyaRek("Света");
// Определение временных переменных
strPrivet("Привет ");
strEnd("! С добрым утром.");
// Определение переменной-результата.
Cstring strResult();
// Символьные вычисления.
strResult = strPrivet + strImyaRek + strEnd;
Подробнее о
Реализацию собственных символьных классов следует производить с осторожностью. Если класс закрыт от изменений, но при этом он возвращает свои защищенные значения, то хакер может получить ссылку на этот объект, и, изменяя содержимое этой ссылки, фактически он меняет содержимое этого защищенного элемента класса. Более подробно об этой проблеме смотри примеры в книге [74].
Также к составным специальным
В разделах 6.2 и 7.1 уже использовалось понятие массива, правда, применительно только к примитивным символьным данным. Но массив, в принципе, может состоять из любых данных, в том числе и числовых, и типов-классов и структур, а также из других массивов. Массивы представляют собой смежные ячейки памяти, начиная с начального адреса массива и до последней ячейки памяти массива. Доступ к каждой ячейке памяти осуществляется по его индексу. С помощью индекса вычисляется адрес нужной ячейки по формуле:
<адрес элемента> = <начальный адрес массива>+<индекс>*<длина типа данных>
<тип> <переменная>[<N>]
для языков Си, С++, Java, где N - максимальное число ячеек в массиве;
DIM <переменная с типом>(<N>)
для языка Бейсик
[Пример 09]
REM - определяет массив строк A$ из 10 переменных и матрицу вещественных чисел D размером 3х3; DIM A$(10), D(3,3)
[Пример 10]
/* - определяет массив строк A из 10 переменных и матрицу вещественных чисел d размером 3х3, а также массив примитивных символов array из десяти символов и указатель на символьный массив, которому можно назначить адрес имеющегося массива. */ string A[10]; double d[3][3]; char *c, array[10];
Для выбора одного из элементов массива используется его индекс. Индекс - порядковый номер элемента массива в отведенной для него области памяти. Операция нахождения значения ячейки массива по его индексу называется индексированием. Индексом может быть как целое число, так и целая переменная.
[Пример 11]
/* Задание типов элементам */ char b, c, str[5]; int i; ... /* Присвоение элементов: */ c = str[5]; b = str[i];
В приведенном примере символьным переменным b и c присваивается соответственно значение i -ой и третьей ячейки массива символьных данных str.
Максимальный
[Пример 12]
const short MAXNUMBER = 8; char str[7]; short nIndexes[MAXNUMBER];
[Пример 13]
char str[] = "Привет!";
short nIndexes[] = {5, 4, 6, 8, 7, 3, 1, 2};
Как видно, при определении индексов этим способом квадратные скобки остаются пустыми.
Кроме массивов, для обращения к переменной по ее адресу можно пользоваться указателем на переменную указанного типа. Указатели есть в языках Си, C++ и Java, но отсутствует во многих "старых" языках, таких как ФОРТРАН и Quick Basic.
Синтаксис определения указателя следующий:
<тип> *<имя переменной>
Замечание. Как уже отмечалось в примере 10, массивы можно определить как указатели. Однако это нужно делать в следующих случаях:
new, calloc, malloc и других функций выделения памяти. После окончания использования массива память следует освободить функциями delete, free и др.После определения указателя, например, после объявления:
char *c, a, d='a';
в переменной c будет храниться адрес ячейки содержащей символ. Но для этого необходимо сначала создать эту ячейку, например, с помощью функции malloc:
c = (char *) malloc( sizeof( char ) );
или присвоить ей адрес существующей ячейки памяти:
c = d;
Для того чтобы получить значение ячейки памяти, после присвоения адреса по формуле 7.8, можно использовать следующий оператор:
a = *c;
В этом случае переменной a будет присвоено значение 'a', а после присвоения:
*c = 'b';
переменной d будет присвоено значение 'b'
c = a; (компилятор выдаст ошибку!)
[Пример 14]
/* Описание переменных */ char *c, d='a'; unsigned char *u; /* Присвоение указателей */ c = d; u = (unsigned char *)c;
В результате в переменной u хранится содержимое ячейки d "как есть". Переменная c будет по-прежнему иметь
В некоторых функциях используется указатель на "пустой" тип: void *. Перед использованием этого указателя необходимо присвоить (переопределить) его на указатель на необходимый тип данных.
[Пример 15]
/* Определение переменных */ char *c; /* Присвоение указателей: */ c = (char *) malloc( sizeof( char ) );
Чтобы присвоить переменной-указателю адрес выделенной ячейки памяти, необходимо явно изменить тип возвращаемого значения функции malloc (по-умолчанию функция malloc возвращает тип: "void *").
Ссылка - это "
void func( int a, int *b, int c);
В этом случае первый параметр передается "по значению", то есть он принимает значение "фактического" параметра целого типа, и записывает его во внутреннюю переменную или стек. После выхода из функции его значение теряется.
Второй параметр передает в качестве фактического параметра указатель на переменную. Если теперь "разыменовать" этот указатель, то значение переменной, на которую указывает указатель, может меняться, но
Наконец, третий параметр функции сочетает в себе достоинства обоих способов func, определенное в [7.12], будет следующим:
func( i, i, i );
где i - целая переменная - "
Списки представляют собой примерно такую же последовательность данных, как и массивы. Они отличаются друг от друга следующим образом:
next() ;[Пример 16]
struct list_node{
union data datum_node;
struct list_node *next_node;
}
где data - объединение из примера 02. Этот элемент, в принципе, может иметь любой тип: как примитивный, так и определенный тип-класс. Второй элемент, имеющий тип: struct list_node * (указатель на собственный тип), является обязательным. В этом указателе находится либо адрес следующего элемента списка-узла ("node" по-английски - "звено, узел"), или нулевой указатель (обозначение - NULL), если это С первого взгляда кажется, что использование списка, по сравнению с массивом, неудобно. Но это неудобство происходит только при работе с "
В данной лекции Вы познакомились с так называемыми "пользовательскими" и "специальными" типами данных. Введение в языки программирования возможности создавать собственные типы данных вызвало настоящую революцию в программировании. Появившись вначале в языке Паскаль, эти типы широко "разошлись" по другим языкам программирования. Кстати говоря,
Среди
Автор особо хотел бы остановить внимание на другом специальном типе данных - списке. Хотя списки практически не встречаются в "процедурных" языках программирования (их реализация имеется только в библиотеке ClassLib Borland C/C++), они очень широко используются при анализе текстов, грамматическом разборе приложениях, и других алгоритмах искусственного интеллекта. Поэтому автор советует изучить этот тип данных самостоятельно.
| Термин | Английский термин | Разъяснение |
|---|---|---|
| специальный символьный тип данных | special symbol data type | |
| массив | array | Представляет собой смежные ячейки памяти, начиная с начального адреса массива, и до последней ячейки памяти массива. Доступ к каждой ячейке памяти массива осуществляется при помощи его индекса. |
| индекс | index | Порядковый номер ячейки массива. В Си-подобных языках индекс первой ячейки начинается с 0. |
| Си подобные языки | C based languages | Языки программирования, имеющие синтаксис и обозначения, сходные с принятыми обозначениями в языке Си. К Си-подобным языкам автор относит: C++, C#, Java, Perl, |
| структура | structure | Представляет собой несколько типов данных, расположенных вместе, в соседних ячейках памяти. Структура как тип данных имеет собственное имя, длина ее элемента вычисляется с помощью функции: sizeof. |
| объединение | union | Представляет собой несколько типов данных, расположенных в одной ячейке памяти вместо друг друга. Объединение имеет собственное имя как тип данных. |
| перечисления | enumerate | Представляет собой целые переменные без знака, способные принимать значения только именованных констант, причем первой константе присваивается значение 0. |
| пользовательский тип данных | users' data type | Тип данных, созданный системным или прикладным программистам для собственных нужд. К пользовательским типам данных на языке Си относят классы, структуры, объединения и перечисления. |
| именованный тип данных | denominate data type | Целый тип данных, значения (константы) для которых записаны как имена (идентификаторы). Это позволяет использовать в различных операциях вместо безликого числа некоторого "осмысленного имени", что улучшает "читабельность" программы. На языке Си именованные константы вводятся оператором |
| константа | constant | Число или символьная строка, не меняющаяся во время исполнения программ. |
| переменная | variable | Идентификатор, обозначающий ячейку памяти для хранения данных со значением определенного типа. Этот идентификатор называется именем переменной. |
| идентификатор | identification | Любая последовательность латинских букв и цифр, начинающаяся с латинской буквы. Идентификаторы служат именами констант и переменных. |
| модификатор | modification | Идентификатор, служащий для уточнения и/или изменения значения по-умолчанию для указателей, типов данных и т.п. |
| целая константа | integer constant | Переменная (идентификатор), имеющее постоянное неизменное целое значение. В языке Си эти константы объявляются либо прагма |
| явное указание максимальных индексов | strict direction of ultimate index | Указание максимального значения |
| неявное указание максимального индекса | implicit direction of ultimate index | Указание максимального |
| указатель 1. | pointer 1. | Целая переменная, хранящая |
| указатель 2. | pointer 2. | Целая переменная, хранящая в себе адрес другой переменной (или массива) указанного типа. В языке Си указателем является специальный тип - "адресная переменная" того типа данных, на которое указывает указатель. Это делает невозможным (так надо!) применения целочисленных операций над указателями. |
| NULL-указатель | NULL 1. | См. пустой (нулевой) указатель. Используется в языке Си. |
| пустой (нулевой) указатель | empty (zero) pointer | Указатель, принимающий нулевое целое значение. При попытке обращения к "пустому" указателю генерируется отказ системы (" |
| ссылка | link | " |
| список | list | Структура данных, представляющее собой "значение" и ссылку на следующий элемент списка. Обратиться к элементу списка можно через |
| голова списка | head of the list | Адрес первого элемента списка. |
| хвост списка | tail of the list | Все элементы списка, расположенные после текущего элемента. |
| метод next | next (method) | Ищет адрес следующего элемента списка. Возвращает значение: NULL, если текущий элемент списка - последний. |
| NULL | NULL 2. | "Нулевой символ" при адресации памяти. При обращении программы по этому адресу выводится сообщение: " |
В таблицах 7.1 - 7.7 Дан список основных функций работы с символьными данными.
| Тип данных | Префикс/Окончание | Разрядность регистров/длина | Примечание |
|---|---|---|---|
| Quick Basic | |||
| STR <идентификатор>$ | Переменная длина (до 255 символов) | Для хранения 1 символа в кодировке ASCII. | Не защищен от изменений. |
| VB Script | |||
| в зависимости от конкретного значения | Переменная длина | Используется для хранения всех видов данных. | |
| Java | |||
| char | с | 2 байта | Для хранения одного символа в кодировке Unicode |
| String | str | Переменная длина | Класс для хранения символов в кодировке Unicode. Защищено от изменений! |
| javascript | |||
| в зависимости от конкретного значения | Переменная длина | Используется для хранения всех видов данных. | |
| C/C++ | |||
| char | с | 1 байт | Для хранения одного символа в кодировке ASCII (со знаком) |
| uc | 1 байт | Для хранения одного символа в кодировке ASCII (без знака) | |
| char * | pc | от 2 до 4 байт | Указатель на массив (переменной длины) |
| от 2 до 4 байт | Указатель на массив (переменной длины) | ||
| C/C++ Windows API | |||
| BYTE | b | 1 байт | Эквивалентен |
| NPSTR | npsz | 2 байта | Эквивалентен char near * |
| LPSTR | lpch | 4 байта | Эквивалентен char far * |
| LPCSTR | lpsz | 4 байта | Эквивалентен const char far * |
| C++ MFC | |||
| cstr, str | Переменная длина | Класс для хранения символов в кодировке Unicode. Защищено от изменений! | |
| C++ Classlib | |||
| string | str | Переменная длина | Класс для хранения символов в кодировке ASCII (и Unicode?). Защищено от изменений! |
| Группа функций | Функция/Метод | Описание | Пример |
|---|---|---|---|
| Язык С++. Функции |
|||
| Конструктор | |
Конструктор объекта |
|
| Строка как массив | GetLength |
Возвращает число символов в строке. | |
|
Проверяет, является ли строка пустой (т.е. она состоит из 0 символов). | ||
Empty |
Удаляет из строки все символы. | ||
GetAt |
Возвращает символ в текущей позиции. | ||
operator [] |
Функция аналогична функции: GetAt | ||
SetAt |
Записывает символ в указанную позицию. | ||
operator LPCTSTR |
Прямой доступ к символам текущей строки в формате языка Си. | ||
| Присвоение и конкатенация | operator = |
Назначает новое значение строки объекту. | |
operator + |
|||
operator += |
|||
| Сравнение | operator == <, etc. |
Операторы сравнения ( |
|
|
Сравнение двух строк ( |
||
CompareNoCase |
Сравнение двух строк (без учета регистра). | ||
| Извлечение | |
Выделяет среднюю часть строки (как функция |
|
Left |
Выделяет левую часть строки (как функция LEFT$ в Бейсике). | ||
Right |
Выделяет правую часть строки (как функция Бейсика RIGHT$). | ||
SpanIncluding |
Выделяет подстроку, которая содержит только символы из данного множества; | ||
SpanExcluding |
Выделяет подстроку, которая содержит символы, не входящие в указанное множество. | ||
| Другие преобразования | MakeUpper |
Преобразует все символы в строке в верхний регистр. | |
MakeLower |
Преобразует все символы в строке в нижний регистр. | ||
MakeReverse |
Изменяет порядок символов в строке на обратный порядок следования символов. | ||
Format |
Форматирует строку в соответствии со спецификацией sprintf. | ||
TrimLeft |
Обрезает "лидирующие", начальные пробелы в строке. | ||
TrimRight |
Обрезает "хвостовые" пробелы в строке. | ||
FormatMessage |
Форматирует строку сообщения. | ||
| Поиск | Find |
Ищет символ или подстроку внутри текущей строки. | |
ReverseFind |
Ищет символ или подстроку внутри текущей строки, начиная с ее конца. | ||
FindOneOf |
Finds the first matching character from a set. | ||
| Архивация/Дамп | operator << |
Помещает строку в выходной поток данных. | |
operator >> |
Читает строку из входного потока данных. | ||
| Buffer Access | Функции манипуляции с буфером | ||
GetBuffer |
Возвращает указатель на символы из строки. | ||
GetBufferSetLength |
Возвращает указатель на символы из строки |
||
ReleaseBuffer |
Удаляет буфер для хранения строки данных. | ||
FreeExtra |
Удаляет все заголовки этого строкового объекта, предварительно размещенного во внешней памяти, | ||
LockBuffer |
Делает ссылку на строку активной (т.е. к размещенной строке командой GetBuffer, можно обращаться). | ||
UnlockBuffer |
Делает ссылку на строку не активной, разрешая операционной системе произвольно перемещать буфер в памяти. | ||
| Специфичные для Windows | AllocSysString |
Размещает BSTR из данных |
|
SetSysString |
Устанавливает текущий BSTR объект данными из |
||
LoadString |
Загрузить существующую строку из ресурсов Windows. | ||
AnsiToOem |
Преобразует строку символов из формата ANSI в |
||
OemToAnsi |
Преобразует строку символов из формата |
||
| Функция/Метод | Синтаксис | Описание | Пример |
|---|---|---|---|
| Язык С++. Функции ClassLib Borland C/C++ | |||
| Header File | |
||
| Конструкторы: | string::string |
||
| Данные - члены класса: | StripType |
||
| Публичные методы: | |||
ansi_to_oem |
void ansi_to_oem(); |
перевод текста строки из кодировки ANSI в кодировку |
|
append |
string _FAR append( const string _FAR s );
string _FAR append( const char _FAR * |
добавляет заданную строку s к текущей строке. | |
assign |
string _FAR assign( const string _FAR s );
|
||
|
int
|
строка s сравнивается с исходной строкой в лексикографическом порядке, и выдается значение: меньше нуля, если исходная строка меньше s, 0, когда строки равны и больше нуля, когда исходная строка больше s. | |
contains |
int contains(const char _FAR *
|
проверяется вхождение строки s (или |
|
copy |
size_t copy( char _FAR *cb, size_t n =
string copy() const throw( xalloc ).; |
функция копирует n символов в строку cb из текущей строки. Возвращает точное число скопированных символов. В третьей форме синтаксиса функция возвращает собственную копию; | |
c_str |
const char _FAR *c_str() const; |
||
find |
size_t find( const string _FAR s );
|
Возвращает позицию первого вхождения подстроки s в текущую строку. | |
find |
size_t find( const TRegexp _FAR
|
Возвращает позицию первого вхождения подстроки с |
|
find_first_of |
size_t find_first_of( const string _FAR s ) const;
|
возвращает первый символ из текущей строки, совпавший с любым символом из строки s. | |
find_first_not_of |
size_t find_first_not_of( const string _FAR s ) const;
|
||
find_last_of |
size_t find_last_of( const string _FAR s ) const;
|
||
find_last_not_of |
size_t find_last_not_of( const string _FAR s ) const;
|
||
get_at |
char get_at( size_t |
возвращает символ в указанной позиции |
|
get_case_sensitiveFlag |
static int get_case_sensitive_flag(); |
Возвращает значение 0, если сравнение |
|
get_initial_capacity |
static |
||
get_max_waste static |
|||
get_paranoid_check |
static int get_paranoid_check(); |
||
get_resize_increment |
|||
static |
|||
get_skipwhitespace_flag |
static int get_skipwhitespace_flag(); |
возвращает 1, если при поиске пропускаются |
|
hash |
|
Выдает значение хеш величины типа данных; | |
initial_capacity |
static size_t initial_capacity(size_t ic = 63); |
||
insert |
string _FAR insert( size_t start, const string _FAR s );
|
Вставляет |
|
is_null |
int is_null() const; |
Возвращает 1, если строка пустая; | |
length |
|
возвращает длину текущей строки. | |
MaxWaste |
static size_t MaxWaste(size_t mw = 63); |
задает максимальное число |
|
oem_to_ansi |
void oem_to_ansi(); |
функция преобразует строку из кодировки |
|
|
string _FAR
string _FAR
|
Функция прибавляет к началу текущей строки строку s, начиная с позиции start. | |
put_at |
void put_at( size_t |
записывает в позицию |
|
read_file |
istream _FAR read_file(istream _FAR is); |
читает файл из |
|
read_line |
istream _FAR read_line(istream _FAR is); |
читает строку файла из указанного потока в строку, пока не достигнут знак "перевод строки" или " |
|
read_string |
istream _FAR read_string(istream _FAR is); |
читает строку файла из указанного потока в строку, пока не достигнут знак "\0" или " |
|
read_to_delim |
istream _FAR read_to_delim(istream _FAR is, char delim = '\n'); |
читает строку файла из указанного потока в строку, пока не достигнут знак delim или " |
|
read_token |
istream _FAR read_token(istream _FAR is); |
читает строку файла из указанного потока в строку, пока не достигнут пробельный символ или " |
|
rfind |
size_t rfind( const string _FAR s );
|
возвращает последний символ из текущей строки, совпавший с любым символом из строки s. | |
remove |
string _FAR remove( size_t
|
удаляет часть текущей строки (длиной n или до конца строки), начиная с позиции |
|
replace |
string _FAR replace( size_t
|
удаляет, по крайней мере, n (n1) позиций из текущей строки, начиная с позиции |
|
|
size_t
|
||
|
void |
увеличивает длину строки на m байт. | |
resize_increment |
static size_t resize_increment(size_t ri = 64); |
устанавливает |
|
set_case_sensitive |
static int set_case_sensitive(int tf = 1); |
устанавливает |
|
set_paranoid_check |
static int set_paranoid_check(int ck = 1); |
||
skip_whitespace |
static int skip_whitespace(int sk = 1); |
Устанавливается в единицу, чтобы пропускать |
|
|
TSubString |
удалят из текущей строки все пробельные или заполняющие с символы вначале, в конце строки или в обоих направлениях, и выдается ссылка на результирующую строку типа TSubString. | |
|
string
|
возвращает подстроку из текущей строки, начинающейся с позиции |
|
|
TSubString
TSubString
|
создает объект типа TSubstring, содержащей копию строки |
|
to_lower |
void to_lower(); |
переводит строку в нижний регистр; | |
to_upper |
void to_upper(); |
переводит символы строки в верхний регистр. | |
| Protected Member Functions | |||
valid_element |
int valid_element( size_t |
возвращает 1, если в позиции |
|
valid_index |
int valid_index( size_t |
возвращает 1, если |
|
assert_element |
|||
assert_index |
|||
|
|||
| Operators | =; +=; +=; +; []; (); ==; !=; <; <=; >; >=; |
||
| Related Global Operators and Functions | >>; <<; +; getline; to_lower; to_upper; |
||
| Функция/Метод | Описание | Пример |
|---|---|---|
| Java. Методы класса String | ||
charAt(Позиция) |
Возвращает символ строки, стоящий в заданной позиции. Позиции отсчитываются с 0. | |
compareTo( Любая_строка) |
Сравнивает вызывающий строковый фрагмент и строковый аргумент на предмет первенства в |
String .Выражение: выдаст 0.Выражение: |
|
Возвращает true, если вызывающий объект является строкой и равен объекту Другая_строка. В противном случае возвращает false. |
|
equalsIgnoreCase (Другая_строка) |
Возвращает true, если вызывающий объект является строкой и равен объекту Другая_строка без учета регистра букв. В противном случае возвращает false. |
|
|
Возвращает позицию первого вхождения строки: Любая_строка в строковом объекте. Позиция отсчитывается с 0. Возвращает "-1", если Любая_строка не найдена. | |
|
Возвращает позицию первого вхождения строки: Любая_строка в строковом объекте, после позиции Начало. Позиция отсчитывается с 0. Возвращает "-1", если Любая_строка не найдена. | |
|
Возвращает позицию последнего вхождения строки: Любая_строка в строковом объекте. Позиция отсчитывается с 0. Возвращает "-1", если Любая_строка не найдена. | |
length() |
Возвращает длину строкового фрагмента. | String strgreeting = "Привет!". Выражение: Strgreeting.length() возвращает 7. |
|
Возвращает подстроку строкового фрагмента, начинающегося с позиции Начало и оканчивающегося концевым символом строки. Позиции отсчитываются от 0. |
|
|
Возвращает подстроку строкового фрагмента, начинающегося с позиции Начало и оканчивающегося позицией Конец. Позиции отсчитываются от 0. |
|
toLowerCase() |
Возвращает исходную строку символов, все символы у которой - строчные. | |
toUpperCase() |
Возвращает исходную строку символов, все символы у которой - прописные. | |
|
Удаляет в возвращаемой строке ведущие и концевые пробелы. | |
| Функция/Метод | Описание | Пример |
|---|---|---|
| VB Script функции | ||
|
Функция возвращает ASCII |
- возвращает 65, а - 82. |
|
Эта функция возвращает ASCII символ по ASCII коду. | - возвращает "A". |
Instr |
Функция используется для получения местоположения одной строки в другой. Функция имеет следующий синтаксис: Instr([Begin_Pos], Str1, Str2, [ComparisionType]), - где Begin_Pos - необязательный элемент, задающий начальную позицию поиска, Str1 - строка, в которой происходит поиск, Str2 - исходная строка, ComparisionType - способ сравнения: 0 - бинарное сравнение (по умолчанию), 1 - сравнение с игнорированием регистра букв. |
|
LCase |
Возвращает исходную строку символов, все символы у которой - строчные. | |
Left |
Функция возвращает определенное число символов из строки. | Выражение: Left(" - возвращает " |
|
Функция возвращает число символов в строке. | - выдает число 7. |
LTrim |
Функция удаляет предшествующие пробелы из строки. | |
|
Возвращает определенное число символов из строки. | Выражение: - возвращает " |
Right |
Функция возвращает определенное число символов с правой стороны строки. | Right(" - возвращает "Script" |
RTrim |
Функция удаляет последующие пробелы из строки. | |
Str |
Эта функция преобразует цифровое выражение в строку. | |
StrComp |
Эта функция используется для сравнения двух строк в |
|
String |
Функция предназначена для заполнения строки определенным числом символов. | String(10, "A") - вернет строку "AAAAAAAAAA". |
|
Функция удаляет и предшествующие, и последующие пробелы из строки. | |
UCase |
Возвращает исходную строку символов, все символы у которой - прописные. | |
| Функция/Метод | Описание | Пример |
|---|---|---|
| Язык Си. Функции ANSI C | ||
#include <string.h> |
Заголовочный файл для этих функций | |
int |
Возвращает длину строки str1 (позицию его символа \0). | |
char* strerror( char *str ); |
||
char * |
Конкатенация строки str1 и str2, но в строку n записывается не более n символов. Возвращается значение строки str1 или NULL при неудаче конкатенации. | |
int |
Сравниваются не более чем n символов в строке str1 со строкой str2 в лексикографическом порядке. Возвращает: "0" - если строки совпали, "-1" - если str1 < str2, "1" - если str1 > str2. | |
char * |
Копирует строку str2 в строку str1, но не более чем n символов. Возвращается значение строки str1 или NULL при неудаче копирования. | |
char * |
Ищется первое вхождение символа из строки str2 в строке str1. Возвращает указатель на этот символ или NULL, если символы не обнаружены. | |
char * |
Ищется последнее вхождение символа из строки str2 в строке str1. Возвращает указатель на этот символ или NULL, если символы не обнаружены. | |
char * |
Ищется первое вхождение символа, которого нет в строке str2, в строке str1. Возвращает указатель на этот символ или NULL, если символы не обнаружены. | |
char * |
Ищется первое вхождение подстроки str2 в строке str1. Возвращается указатель на заданную подстроку или NULL в случае ее необнаружения. | |
char *strtok( char *str1; char *str2 ); |
Функция разбивает строку str1 на слова, вставляя после каждого из них символ '\0'. Символы, являющиеся разделителями слов, перечислены в строке str2. При первом вызове функция возвращает указатель на str1. При последующем вызове (с параметром str1 == NULL) она возвращает указатели на другие слова в строке str1. Функция возвращает NULL, если все слова закончились. | |
char *memchr( char *buf, char |
Функция ведет поиск первого вхождения символа |
|
int memcmp( char *buf1, char *buf2, |
Сравниваются не более чем |
|
char *memcpy( char *dst1, char *src2, |
Копирует строку src2 в строку dst1, но не более чем n символов. Возвращается значение строки dst1. Реализация функции гарантирует, что перекрывающие участки будут правильно обработаны. | |
| Функции TURBO C и |
||
#include <string.h> |
Заголовочный файл для этих функций | |
int memicmp(char *buf1, char *buf2, |
Сравниваются не более чем |
|
char *memmove(char *buf1, char *buf2, |
Функция полностью идентична функции memcpy. При копировании перекрывающихся участков гарантируется, что эти участки скопируются правильно. | |
char *memset( char *dest, char |
Функция присваивает буферу dest повторяющиеся |
|
char *strnset( char *str1, char |
Функция присваивает буферу str1 повторяющиеся не более чем n число раз значения символа |
|
int strnicmp(char *str1, char *str2, |
Сравниваются не более чем n символов в строке str1 со строкой str2 в лексикографическом порядке. Возвращает: "0" - если строки совпали, "-1" - если str1 < str2, "1" - если str1 > str2. Регистр символов игнорируется. | |
char *strlwr( char *str ); |
Переводит все символы в строке str в нижний регистр. Возвращает значение указателя на строку str. | |
char *strrev( char *str ); |
Функция меняет порядок следования символов в строке str. Возвращает значение указателя на строку str. | |
char *strupr( char *str ); |
Переводит все символы в строке str в верхний регистр. Возвращает значение указателя на строку str. | |
| Функции TURBO C (дополнительно) | ||
#include <string.h> |
Заголовочный файл для этих функций | |
char *strerror( int number ); |
||
| Язык Си. Функции ANSI C | ||
#include <stdio.h> |
Заголовочный файл для этих функций | |
int sprintf( char * |
Функция форматирует и записывает в строку |
| Функция/Метод | Синтаксис | Описание | Пример |
|---|---|---|---|
| Perl Функции для работы со скалярами | |||
chomp |
chomp СПИСОК |
Удаляет из каждого |
|
chop |
chop СПИСОК |
Удаляет из каждого |
|
|
|
Возвращает символ по заданному числовому коду |
|
crypt |
crypt ТЕКСТ, ШИФР |
Шифрует ТЕКСТ с использованием заданного параметра шифра. |
|
|
|
Интерпретирует строковое ВЫРАЖЕНИЕ как шестнадцатеричное число и вычисляет его десятичный эквивалент. При использовании без параметров вызов аналогичен вызову |
|
index |
index СТРОКА, ПОДСТРОКА[, ПОЗИЦИЯ] |
Возвращает позицию первого вхождения указанной подстроки в заданную параметром СТРОКА строку или "-1", если подстрока не найдена. Если задан параметр ПОЗИЦИЯ, то поиск начинается с заданной позиции в строке (нумерация символов в строке начинается с "0"). | |
lc |
lc ВЫРАЖЕНИЕ, |
Функция преобразует все прописные буквы строкового параметра ВЫРАЖЕНИЕ в строчные буквы и возвращает полученную строку. В случае применения use local при преобразовании используются текущие локальные установки. При использовании без параметров функция аналогична вызову lc $_ . | |
lcfirst |
lcfirst ВЫРАЖЕНИЕ |
Преобразует первый символ строкового параметра ВЫРАЖЕНИЕ в нижний регистр и возвращает полученную строку. В случае применения use local при преобразовании используются текущие локальные установки. При использовании без параметров вызов функции аналогичен вызову lcfirst $_ . | |
length |
length ВЫРАЖЕНИЕ |
Возвращает количество байтов в строке, являющегося значением параметра ВЫРАЖЕНИЕ. При использовании без параметров функция эквивалентна вызову length $_ . | |
oct |
oct ВЫРАЖЕНИЕ |
Интерпретирует строковое ВЫРАЖЕНИЕ как восьмеричное число и вычисляет его десятичный эквивалент. Если строка начинается с символов 0x, то его содержимое интерпретируется как шестнадцатеричное число. При использовании без параметров вызов функции аналогичен вызову oct $_ . | |
ord |
ord ВЫРАЖЕНИЕ |
Возвращает числовой ASCII код первого символа строки, являющегося значением параметра ВЫРАЖЕНИЕ. При использовании без параметров вызов функции аналогичен вызову ord $_ . | |
pack |
pack ШАБЛОН, СПИСОК |
Упаковывает массив или список значений в двоичную структуру в соответствии с заданным шаблоном, представляющим собой последовательность символов, которые задают порядок и тип значений. Возвращает строку, содержащую полученную структуру. | |
|
|
В списковом контексте возвращает список значений, состоящий из элементов, заданным параметром СПИСОК списка, но в обратном порядке, начиная с последнего символа. В скалярном контексте соединяет все элементы списка в одну строку, состоящую из символов полученной строки, но в обратном порядке. | |
rindex |
rindex СТРОКА, ПОДСТРОКА[, ПОЗИЦИЯ] |
Возвращает позицию последнего вхождения указанной подстроки в заданную параметром СТРОКА строку или "-1", если подстрока не найдена. Если задан параметр ПОЗИЦИЯ, то поиск начинается до заданной позиции в строке (включая символ в этой позиции). | |
sprintf |
sprintf ФОРМАТ, СПИСОК |
Возвращает строку, представляющую собой форматный вывод |
|
|
|
Находит и возвращает из параметра СТРОКА, подстроку длиной, равной значению параметра ДЛИНА, начиная с символа, заданного параметром СМЕЩЕНИЕ. Если значение СМЕЩЕНИЕ отрицательно, то извлечение начинается с последнего символа строки. Если значение ДЛИНА отрицательно, то от конца строки отсекаются количество символов, равное абсолютному значению этого параметра. Если задан строковый параметр ЗАМЕЩЕНИЕ, то найденная подстрока замещается ею в параметре СТРОКА, который в этом случае должен быть l-Значением. | |
uc |
uc ВЫРАЖЕНИЕ, |
Функция преобразует все строчные буквы строкового параметра ВЫРАЖЕНИЕ в прописные буквы и возвращает полученную строку. В случае применения use local при преобразовании используются текущие локальные установки. При использовании без параметров вызов функции аналогичен вызову uc $_ . | |
ucfirst |
ucfirst ВЫРАЖЕНИЕ |
Преобразует первый символ строкового параметра ВЫРАЖЕНИЕ в верхний регистр и возвращает полученную строку. В случае применения use local при преобразовании используются текущие локальные установки. При использовании без параметров вызов функции аналогичен вызову ucfirst $_ . | |
| Лексикографический порядок ( |
|||
| Perl Функции для работы со скалярами (поиск и замена фрагментов) | |||
|
|
Возвращает значение указателя позиции в строке после последней выполненной для нее операции поиска по образцу: m//g. Если используется в левой части операции присвоения, то изменяет значение указателя, влияя на \G в регулярном выражении. При использовании без параметров данный вызов эквивалентен вызову: |
|
quotemeta |
quotemeta ВЫРАЖЕНИЕ quotemeta |
Возвращает строку, в которой перед каждым неалфавитно-цифровым символом поставлена обратная черта. Значение параметра: ВЫРАЖЕНИЕ - интерпретируется как строка. (Внутренняя функция реализации |
|
split |
split /ОБРАЗЕЦ/[.ВЫРАЖЕНИЕ[.ПРЕДЕЛ]] split |
Разбивает строку, являющуюся значением параметра: ВЫРАЖЕНИЕ, на массив строк, с использованием разделителя, определяемым регулярным выражением в параметре: ОБРАЗЕЦ. В списковом контексте возвращает полученный массив, в скалярном контексте - количество найденных строк разбиения. Если задан параметр: ПРЕДЕЛ, разбивает на не более чем заданное этим параметром число строк. Если параметр: ВЫРАЖЕНИЕ - не задан, то используется внутренняя специальная переменная интерпретатора Perl $_, Если не задан образец, то разбивает по |
|
|
|
Оптимизирует строковые данные параметра: ВЫРАЖЕНИЕ - для дальнейшего использования в повторных операциях поиска по образцу. В цикле с несколькими операциями поиска может сэкономить время выполнения. При использовании без параметров функция эквивалентна: |
|
| Perl Функции для работы с массивами скаляров | |||
delete |
delete ВЫРАЖЕНИЕ |
Удаляет из массива скаляров его элемент или фрагмент, заданный параметром: ВЫРАЖЕНИЕ. Если удаляется последний элемент массива, то автоматически изменяется длина массива, если удаляются элементы из его середины, то оставшиеся элементы не сдвигаются (для сдвига используйте функцию |
|
exists |
exists ВЫРАЖЕНИЕ |
Проверяет, был ли когда-либо инициализирован в массиве скаляров элемент, заданный параметром: ВЫРАЖЕНИЕБ, например, $array[3], даже если сейчас его значение не определено. Если да, то возвращает значение "истина", иначе - "ложь". Функция exist работает с массивами скаляров только в Perl версий 5.6.0 и выше. | |
|
|
Удаляет из массива скаляров последний элемент и возвращает его значение. Если массив пустой, то возвращает неопределенное значение undef. Если функция вызывается без параметров, то главной программе вызов эквивалентен |
|
push |
push МАССИВ, СПИСОК |
Рассматривает массив скаляров, заданный параметром: МАССИВ, как стек и добавляет после его последнего элемента элементы списка, заданные параметром: СПИСОК. Возвращает количество элементов полученного массива. | |
shift |
shift МАССИВ shift |
Удаляет из массива скаляров первый элемент и возвращает его значение. После удаления элементы оставшиеся элементы сдвигаются влево: второй элемент становится первым, третий - вторым и т.д. Если массив пустой, то возвращает неопределенное значение undef. Если функция вызывается без параметров, то главной программе вызов эквивалентен shift @ARGV, а в подпрограмме shift @_. | |
|
|
Удаляет из массива количество элементов, заданное значением параметра: КОЛИЧЕСТВО, начиная с элемента, заданное значением параметра: НОМЕР. В случае задания параметра СПИСОК заменяет указанные в нем элементы списка. В списковом контексте возвращает удаленные элементы; в скалярном контексте - последний удаленный элемент. Если параметр:КОЛИЧЕСТВО не задан, то удаляются все элементы после элемента с номером, определенным значением параметра: НОМЕР. | |
unshift |
unshift МАССИВ, СПИСОК |
Добавляет элементы списка, определенного параметром: СПИСОК, в начало массива, заданного параметром МАССИВ. Выполняет действия, противоположные действиям функции shift. | |
grep |
grep БЛОК СПИСОК grep ВЫРАЖЕНИЕ, СПИСОК |
||
join |
join ВЫРАЖЕНИЕ, СПИСОК |
Рассматривает все элементы списка, определенного параметром: СПИСОК, как строковые значения, соединяет их в одну строку, вставляя между ними разделитель, равный значению параметра: ВЫРАЖЕНИЕ, и возвращает полученную строку. | |
map |
map БЛОК СПИСОК map ВЫРАЖЕНИЕ, СПИСОК |
||
pack |
pack ВЫРАЖЕНИЕ, СПИСОК |
||
|
|
В списковом контексте возвращает список значений элементов, заданный параметром: СПИСОК, в обратном порядке, начиная с последнего элемента. В скалярном контексте соединяет все элементы в одну строку и возвращает строку, в которой символы расположены в обратном порядке, начиная с последнего символа. | |
sort |
sort [ПОДПРОГРАММА] СПИСОК sort [БЛОК] СПИСОК |
Сортирует список значений, заданный в параметре: СПИСОК. Если параметры БЛОК и ПОДПРОГРАММА не заданы, то используется стандартная процедура сравнения строковых данных. Если они заданы, то операторы блока или подпрограммы используются в качестве процедуры сравнения при сортировке элементов списка. В этом случае в теле блока или подпрограммы в последнем операторе следует использовать операцию <=> или cmp в зависимости от сортировки соответственно числовых и строковых данных. Возвращает список, элементами которого являются отсортированные элементы исходного списка. | |
unpack |
unpack ШАБЛОН, ВЫРАЖЕНИЕ |
||
Одним из преимуществ "новых" языков программирования (таких как "Паскаль", "Си") является появление "пользовательских" типов данных. В языке Си к таким данным относят структуры, объединения и перечисления. Рассмотрим их поподробнее.
Структура представляет собой несколько типов данных, расположенных вместе, в соседних ячейках памяти. Структура имеет собственное имя как тип данных, длина ее элемента (в памяти компьютера) вычисляется с помощью функции sizeof (в C и C++). Пример структуры следующий:
[Пример 01]
/* Инициализируем константу */
const unsigned short MAXSTRINGLENGTH = 256;
/* Описание структуры stringz */
struct stringz
{
char string[MAXSTRINGLENGTH];
short nLength;
}
Здесь определена структура с именем stringz, содержащая в себе массив string длиной MAXSTRINGLENGTH (в нашем случае - это 256 символов), и целым числом длиной 2 байта nLength, в котором может, например, храниться реальная длина строки.
Объединение
Объединение похоже на структуру, но в ней данные хранятся не вместе друг с другом, а вместо друг друга. Например, в следующем объединении с тегом data:
[Пример 02]
/* Объявление константы
const unsigned short STRDATALENGTH = 32:
/* Объявление объединения
union data{
long intdata;
double doubledata;
char strdata[STRDATALENGTH];
}
Может храниться либо длинное целое, либо данные с плавающей точкой, либо массив-строка символов длиной 32 байта, причем все - в одних и тех же ячейках памяти. Функция sizeof, примененная к объединению, выдает значение самого длинного типа данных в объединении.
Обращение к элементам структуры и объединения осуществляется либо через знак "." (для переменной), либо знаком "->" (для указателей). Например:
[Пример 03]
/* Инициализируем константу */ const unsigned short MAXSTRINGLENGTH = 256; /* Объявление переменных */ struct stringz aString, *theString; union data aData, *theData; /* Присвоение значений переменным */ aString.nLength = 5; memset(theString -> string, '\0', MAXSTRINGLENGTH); aData.intdata = 1; theData -> doubledata = 7.0;
Перечисления иногда называют именованными типами данных. Их объявление на языке Си следующее:
enum <тег> {<константа 0>, <константа 1>, ... <константа n>};
Например:
[Пример 04]
/* определяет булевский тип данных */
enum boolean {FALSE, TRUE}
Переменные типа "перечисление" представляют собой целые переменные без знака, способные принимать значения только из списка: <константа 0> ... <константа n>, причем первой константе соответствует значение "0".
Переменную перечисления в Си можно привести к целому типу. Обратное действие вызывает неопределенность.
Если Ваш язык не поддерживает перечисления, можно определить целые константы, соответствующие перечислению, и определить целую переменную, которая будет работать только с этими константами. Но это уже должен отслеживать программист, то есть Вы.
[Пример 05]
stringZ$ = "Привет!" stringZ% = 7
В этом примере вместо структуры stringz в языке Quick Basic используются переменные stringZ$ (для хранения символьных данных) и stringZ% для хранения целого числа.
К составным специальным
В примерах [06 - 08] дается реализация алгоритмов Примера 01 лекции 6 с помощью классов "
_T(...). В компиляторе Java 2 нет специальной функции для перевода 8-ми битных кодировок в Unicode.[Пример 06]
// Определение переменной: <имярек>.
CString strImyaRek("Света");
// Определение переменной-результата.
Cstring strResult();
// Символьные вычисления.
strResult = _T("Привет ") + strImyaRek + _T("! С добрым утром.");
[Пример 07]
// Определение переменной: <имярек>.
string strImyaRek("Света");
// Определение переменной-результата.
string strResult();
// Символьные вычисления.
strResult.append("Привет ");
strResult += strImyaRek;
strResult.append("! С добрым утром.");
[Пример 08]
// Определение переменной: <имярек>.
String strImyaRek("Света");
// Определение временных переменных
strPrivet("Привет ");
strEnd("! С добрым утром.");
// Определение переменной-результата.
Cstring strResult();
// Символьные вычисления.
strResult = strPrivet + strImyaRek + strEnd;
Подробнее о
Реализацию собственных символьных классов следует производить с осторожностью. Если класс закрыт от изменений, но при этом он возвращает свои защищенные значения, то хакер может получить ссылку на этот объект, и, изменяя содержимое этой ссылки, фактически он меняет содержимое этого защищенного элемента класса. Более подробно об этой проблеме смотри примеры в книге [74].
Также к составным специальным
В разделах 6.2 и 7.1 уже использовалось понятие массива, правда, применительно только к примитивным символьным данным. Но массив, в принципе, может состоять из любых данных, в том числе и числовых, и типов-классов и структур, а также из других массивов. Массивы представляют собой смежные ячейки памяти, начиная с начального адреса массива и до последней ячейки памяти массива. Доступ к каждой ячейке памяти осуществляется по его индексу. С помощью индекса вычисляется адрес нужной ячейки по формуле:
<адрес элемента> = <начальный адрес массива>+<индекс>*<длина типа данных>
<тип> <переменная>[<N>]
для языков Си, С++, Java, где N - максимальное число ячеек в массиве;
DIM <переменная с типом>(<N>)
для языка Бейсик
[Пример 09]
REM - определяет массив строк A$ из 10 переменных и матрицу вещественных чисел D размером 3х3; DIM A$(10), D(3,3)
[Пример 10]
/* - определяет массив строк A из 10 переменных и матрицу вещественных чисел d размером 3х3, а также массив примитивных символов array из десяти символов и указатель на символьный массив, которому можно назначить адрес имеющегося массива. */ string A[10]; double d[3][3]; char *c, array[10];
Для выбора одного из элементов массива используется его индекс. Индекс - порядковый номер элемента массива в отведенной для него области памяти. Операция нахождения значения ячейки массива по его индексу называется индексированием. Индексом может быть как целое число, так и целая переменная.
[Пример 11]
/* Задание типов элементам */ char b, c, str[5]; int i; ... /* Присвоение элементов: */ c = str[5]; b = str[i];
В приведенном примере символьным переменным b и c присваивается соответственно значение i -ой и третьей ячейки массива символьных данных str.
Максимальный
[Пример 12]
const short MAXNUMBER = 8; char str[7]; short nIndexes[MAXNUMBER];
[Пример 13]
char str[] = "Привет!";
short nIndexes[] = {5, 4, 6, 8, 7, 3, 1, 2};
Как видно, при определении индексов этим способом квадратные скобки остаются пустыми.
Кроме массивов, для обращения к переменной по ее адресу можно пользоваться указателем на переменную указанного типа. Указатели есть в языках Си, C++ и Java, но отсутствует во многих "старых" языках, таких как ФОРТРАН и Quick Basic.
Синтаксис определения указателя следующий:
<тип> *<имя переменной>
Замечание. Как уже отмечалось в примере 10, массивы можно определить как указатели. Однако это нужно делать в следующих случаях:
new, calloc, malloc и других функций выделения памяти. После окончания использования массива память следует освободить функциями delete, free и др.После определения указателя, например, после объявления:
char *c, a, d='a';
в переменной c будет храниться адрес ячейки содержащей символ. Но для этого необходимо сначала создать эту ячейку, например, с помощью функции malloc:
c = (char *) malloc( sizeof( char ) );
или присвоить ей адрес существующей ячейки памяти:
c = d;
Для того чтобы получить значение ячейки памяти, после присвоения адреса по формуле 7.8, можно использовать следующий оператор:
a = *c;
В этом случае переменной a будет присвоено значение 'a', а после присвоения:
*c = 'b';
переменной d будет присвоено значение 'b'
c = a; (компилятор выдаст ошибку!)
[Пример 14]
/* Описание переменных */ char *c, d='a'; unsigned char *u; /* Присвоение указателей */ c = d; u = (unsigned char *)c;
В результате в переменной u хранится содержимое ячейки d "как есть". Переменная c будет по-прежнему иметь
В некоторых функциях используется указатель на "пустой" тип: void *. Перед использованием этого указателя необходимо присвоить (переопределить) его на указатель на необходимый тип данных.
[Пример 15]
/* Определение переменных */ char *c; /* Присвоение указателей: */ c = (char *) malloc( sizeof( char ) );
Чтобы присвоить переменной-указателю адрес выделенной ячейки памяти, необходимо явно изменить тип возвращаемого значения функции malloc (по-умолчанию функция malloc возвращает тип: "void *").
Ссылка - это "
void func( int a, int *b, int c);
В этом случае первый параметр передается "по значению", то есть он принимает значение "фактического" параметра целого типа, и записывает его во внутреннюю переменную или стек. После выхода из функции его значение теряется.
Второй параметр передает в качестве фактического параметра указатель на переменную. Если теперь "разыменовать" этот указатель, то значение переменной, на которую указывает указатель, может меняться, но
Наконец, третий параметр функции сочетает в себе достоинства обоих способов func, определенное в [7.12], будет следующим:
func( i, i, i );
где i - целая переменная - "
Списки представляют собой примерно такую же последовательность данных, как и массивы. Они отличаются друг от друга следующим образом:
next() ;[Пример 16]
struct list_node{
union data datum_node;
struct list_node *next_node;
}
где data - объединение из примера 02. Этот элемент, в принципе, может иметь любой тип: как примитивный, так и определенный тип-класс. Второй элемент, имеющий тип: struct list_node * (указатель на собственный тип), является обязательным. В этом указателе находится либо адрес следующего элемента списка-узла ("node" по-английски - "звено, узел"), или нулевой указатель (обозначение - NULL), если это С первого взгляда кажется, что использование списка, по сравнению с массивом, неудобно. Но это неудобство происходит только при работе с "
В данной лекции Вы познакомились с так называемыми "пользовательскими" и "специальными" типами данных. Введение в языки программирования возможности создавать собственные типы данных вызвало настоящую революцию в программировании. Появившись вначале в языке Паскаль, эти типы широко "разошлись" по другим языкам программирования. Кстати говоря,
Среди
Автор особо хотел бы остановить внимание на другом специальном типе данных - списке. Хотя списки практически не встречаются в "процедурных" языках программирования (их реализация имеется только в библиотеке ClassLib Borland C/C++), они очень широко используются при анализе текстов, грамматическом разборе приложениях, и других алгоритмах искусственного интеллекта. Поэтому автор советует изучить этот тип данных самостоятельно.
| Термин | Английский термин | Разъяснение |
|---|---|---|
| специальный символьный тип данных | special symbol data type | |
| массив | array | Представляет собой смежные ячейки памяти, начиная с начального адреса массива, и до последней ячейки памяти массива. Доступ к каждой ячейке памяти массива осуществляется при помощи его индекса. |
| индекс | index | Порядковый номер ячейки массива. В Си-подобных языках индекс первой ячейки начинается с 0. |
| Си подобные языки | C based languages | Языки программирования, имеющие синтаксис и обозначения, сходные с принятыми обозначениями в языке Си. К Си-подобным языкам автор относит: C++, C#, Java, Perl, |
| структура | structure | Представляет собой несколько типов данных, расположенных вместе, в соседних ячейках памяти. Структура как тип данных имеет собственное имя, длина ее элемента вычисляется с помощью функции: sizeof. |
| объединение | union | Представляет собой несколько типов данных, расположенных в одной ячейке памяти вместо друг друга. Объединение имеет собственное имя как тип данных. |
| перечисления | enumerate | Представляет собой целые переменные без знака, способные принимать значения только именованных констант, причем первой константе присваивается значение 0. |
| пользовательский тип данных | users' data type | Тип данных, созданный системным или прикладным программистам для собственных нужд. К пользовательским типам данных на языке Си относят классы, структуры, объединения и перечисления. |
| именованный тип данных | denominate data type | Целый тип данных, значения (константы) для которых записаны как имена (идентификаторы). Это позволяет использовать в различных операциях вместо безликого числа некоторого "осмысленного имени", что улучшает "читабельность" программы. На языке Си именованные константы вводятся оператором |
| константа | constant | Число или символьная строка, не меняющаяся во время исполнения программ. |
| переменная | variable | Идентификатор, обозначающий ячейку памяти для хранения данных со значением определенного типа. Этот идентификатор называется именем переменной. |
| идентификатор | identification | Любая последовательность латинских букв и цифр, начинающаяся с латинской буквы. Идентификаторы служат именами констант и переменных. |
| модификатор | modification | Идентификатор, служащий для уточнения и/или изменения значения по-умолчанию для указателей, типов данных и т.п. |
| целая константа | integer constant | Переменная (идентификатор), имеющее постоянное неизменное целое значение. В языке Си эти константы объявляются либо прагма |
| явное указание максимальных индексов | strict direction of ultimate index | Указание максимального значения |
| неявное указание максимального индекса | implicit direction of ultimate index | Указание максимального |
| указатель 1. | pointer 1. | Целая переменная, хранящая |
| указатель 2. | pointer 2. | Целая переменная, хранящая в себе адрес другой переменной (или массива) указанного типа. В языке Си указателем является специальный тип - "адресная переменная" того типа данных, на которое указывает указатель. Это делает невозможным (так надо!) применения целочисленных операций над указателями. |
| NULL-указатель | NULL 1. | См. пустой (нулевой) указатель. Используется в языке Си. |
| пустой (нулевой) указатель | empty (zero) pointer | Указатель, принимающий нулевое целое значение. При попытке обращения к "пустому" указателю генерируется отказ системы (" |
| ссылка | link | " |
| список | list | Структура данных, представляющее собой "значение" и ссылку на следующий элемент списка. Обратиться к элементу списка можно через |
| голова списка | head of the list | Адрес первого элемента списка. |
| хвост списка | tail of the list | Все элементы списка, расположенные после текущего элемента. |
| метод next | next (method) | Ищет адрес следующего элемента списка. Возвращает значение: NULL, если текущий элемент списка - последний. |
| NULL | NULL 2. | "Нулевой символ" при адресации памяти. При обращении программы по этому адресу выводится сообщение: " |
В таблицах 7.1 - 7.7 Дан список основных функций работы с символьными данными.
| Тип данных | Префикс/Окончание | Разрядность регистров/длина | Примечание |
|---|---|---|---|
| Quick Basic | |||
| STR <идентификатор>$ | Переменная длина (до 255 символов) | Для хранения 1 символа в кодировке ASCII. | Не защищен от изменений. |
| VB Script | |||
| в зависимости от конкретного значения | Переменная длина | Используется для хранения всех видов данных. | |
| Java | |||
| char | с | 2 байта | Для хранения одного символа в кодировке Unicode |
| String | str | Переменная длина | Класс для хранения символов в кодировке Unicode. Защищено от изменений! |
| javascript | |||
| в зависимости от конкретного значения | Переменная длина | Используется для хранения всех видов данных. | |
| C/C++ | |||
| char | с | 1 байт | Для хранения одного символа в кодировке ASCII (со знаком) |
| uc | 1 байт | Для хранения одного символа в кодировке ASCII (без знака) | |
| char * | pc | от 2 до 4 байт | Указатель на массив (переменной длины) |
| от 2 до 4 байт | Указатель на массив (переменной длины) | ||
| C/C++ Windows API | |||
| BYTE | b | 1 байт | Эквивалентен |
| NPSTR | npsz | 2 байта | Эквивалентен char near * |
| LPSTR | lpch | 4 байта | Эквивалентен char far * |
| LPCSTR | lpsz | 4 байта | Эквивалентен const char far * |
| C++ MFC | |||
| cstr, str | Переменная длина | Класс для хранения символов в кодировке Unicode. Защищено от изменений! | |
| C++ Classlib | |||
| string | str | Переменная длина | Класс для хранения символов в кодировке ASCII (и Unicode?). Защищено от изменений! |
| Группа функций | Функция/Метод | Описание | Пример |
|---|---|---|---|
| Язык С++. Функции |
|||
| Конструктор | |
Конструктор объекта |
|
| Строка как массив | GetLength |
Возвращает число символов в строке. | |
|
Проверяет, является ли строка пустой (т.е. она состоит из 0 символов). | ||
Empty |
Удаляет из строки все символы. | ||
GetAt |
Возвращает символ в текущей позиции. | ||
operator [] |
Функция аналогична функции: GetAt | ||
SetAt |
Записывает символ в указанную позицию. | ||
operator LPCTSTR |
Прямой доступ к символам текущей строки в формате языка Си. | ||
| Присвоение и конкатенация | operator = |
Назначает новое значение строки объекту. | |
operator + |
|||
operator += |
|||
| Сравнение | operator == <, etc. |
Операторы сравнения ( |
|
|
Сравнение двух строк ( |
||
CompareNoCase |
Сравнение двух строк (без учета регистра). | ||
| Извлечение | |
Выделяет среднюю часть строки (как функция |
|
Left |
Выделяет левую часть строки (как функция LEFT$ в Бейсике). | ||
Right |
Выделяет правую часть строки (как функция Бейсика RIGHT$). | ||
SpanIncluding |
Выделяет подстроку, которая содержит только символы из данного множества; | ||
SpanExcluding |
Выделяет подстроку, которая содержит символы, не входящие в указанное множество. | ||
| Другие преобразования | MakeUpper |
Преобразует все символы в строке в верхний регистр. | |
MakeLower |
Преобразует все символы в строке в нижний регистр. | ||
MakeReverse |
Изменяет порядок символов в строке на обратный порядок следования символов. | ||
Format |
Форматирует строку в соответствии со спецификацией sprintf. | ||
TrimLeft |
Обрезает "лидирующие", начальные пробелы в строке. | ||
TrimRight |
Обрезает "хвостовые" пробелы в строке. | ||
FormatMessage |
Форматирует строку сообщения. | ||
| Поиск | Find |
Ищет символ или подстроку внутри текущей строки. | |
ReverseFind |
Ищет символ или подстроку внутри текущей строки, начиная с ее конца. | ||
FindOneOf |
Finds the first matching character from a set. | ||
| Архивация/Дамп | operator << |
Помещает строку в выходной поток данных. | |
operator >> |
Читает строку из входного потока данных. | ||
| Buffer Access | Функции манипуляции с буфером | ||
GetBuffer |
Возвращает указатель на символы из строки. | ||
GetBufferSetLength |
Возвращает указатель на символы из строки |
||
ReleaseBuffer |
Удаляет буфер для хранения строки данных. | ||
FreeExtra |
Удаляет все заголовки этого строкового объекта, предварительно размещенного во внешней памяти, | ||
LockBuffer |
Делает ссылку на строку активной (т.е. к размещенной строке командой GetBuffer, можно обращаться). | ||
UnlockBuffer |
Делает ссылку на строку не активной, разрешая операционной системе произвольно перемещать буфер в памяти. | ||
| Специфичные для Windows | AllocSysString |
Размещает BSTR из данных |
|
SetSysString |
Устанавливает текущий BSTR объект данными из |
||
LoadString |
Загрузить существующую строку из ресурсов Windows. | ||
AnsiToOem |
Преобразует строку символов из формата ANSI в |
||
OemToAnsi |
Преобразует строку символов из формата |
||
| Функция/Метод | Синтаксис | Описание | Пример |
|---|---|---|---|
| Язык С++. Функции ClassLib Borland C/C++ | |||
| Header File | |
||
| Конструкторы: | string::string |
||
| Данные - члены класса: | StripType |
||
| Публичные методы: | |||
ansi_to_oem |
void ansi_to_oem(); |
перевод текста строки из кодировки ANSI в кодировку |
|
append |
string _FAR append( const string _FAR s );
string _FAR append( const char _FAR * |
добавляет заданную строку s к текущей строке. | |
assign |
string _FAR assign( const string _FAR s );
|
||
|
int
|
строка s сравнивается с исходной строкой в лексикографическом порядке, и выдается значение: меньше нуля, если исходная строка меньше s, 0, когда строки равны и больше нуля, когда исходная строка больше s. | |
contains |
int contains(const char _FAR *
|
проверяется вхождение строки s (или |
|
copy |
size_t copy( char _FAR *cb, size_t n =
string copy() const throw( xalloc ).; |
функция копирует n символов в строку cb из текущей строки. Возвращает точное число скопированных символов. В третьей форме синтаксиса функция возвращает собственную копию; | |
c_str |
const char _FAR *c_str() const; |
||
find |
size_t find( const string _FAR s );
|
Возвращает позицию первого вхождения подстроки s в текущую строку. | |
find |
size_t find( const TRegexp _FAR
|
Возвращает позицию первого вхождения подстроки с |
|
find_first_of |
size_t find_first_of( const string _FAR s ) const;
|
возвращает первый символ из текущей строки, совпавший с любым символом из строки s. | |
find_first_not_of |
size_t find_first_not_of( const string _FAR s ) const;
|
||
find_last_of |
size_t find_last_of( const string _FAR s ) const;
|
||
find_last_not_of |
size_t find_last_not_of( const string _FAR s ) const;
|
||
get_at |
char get_at( size_t |
возвращает символ в указанной позиции |
|
get_case_sensitiveFlag |
static int get_case_sensitive_flag(); |
Возвращает значение 0, если сравнение |
|
get_initial_capacity |
static |
||
get_max_waste static |
|||
get_paranoid_check |
static int get_paranoid_check(); |
||
get_resize_increment |
|||
static |
|||
get_skipwhitespace_flag |
static int get_skipwhitespace_flag(); |
возвращает 1, если при поиске пропускаются |
|
hash |
|
Выдает значение хеш величины типа данных; | |
initial_capacity |
static size_t initial_capacity(size_t ic = 63); |
||
insert |
string _FAR insert( size_t start, const string _FAR s );
|
Вставляет |
|
is_null |
int is_null() const; |
Возвращает 1, если строка пустая; | |
length |
|
возвращает длину текущей строки. | |
MaxWaste |
static size_t MaxWaste(size_t mw = 63); |
задает максимальное число |
|
oem_to_ansi |
void oem_to_ansi(); |
функция преобразует строку из кодировки |
|
|
string _FAR
string _FAR
|
Функция прибавляет к началу текущей строки строку s, начиная с позиции start. | |
put_at |
void put_at( size_t |
записывает в позицию |
|
read_file |
istream _FAR read_file(istream _FAR is); |
читает файл из |
|
read_line |
istream _FAR read_line(istream _FAR is); |
читает строку файла из указанного потока в строку, пока не достигнут знак "перевод строки" или " |
|
read_string |
istream _FAR read_string(istream _FAR is); |
читает строку файла из указанного потока в строку, пока не достигнут знак "\0" или " |
|
read_to_delim |
istream _FAR read_to_delim(istream _FAR is, char delim = '\n'); |
читает строку файла из указанного потока в строку, пока не достигнут знак delim или " |
|
read_token |
istream _FAR read_token(istream _FAR is); |
читает строку файла из указанного потока в строку, пока не достигнут пробельный символ или " |
|
rfind |
size_t rfind( const string _FAR s );
|
возвращает последний символ из текущей строки, совпавший с любым символом из строки s. | |
remove |
string _FAR remove( size_t
|
удаляет часть текущей строки (длиной n или до конца строки), начиная с позиции |
|
replace |
string _FAR replace( size_t
|
удаляет, по крайней мере, n (n1) позиций из текущей строки, начиная с позиции |
|
|
size_t
|
||
|
void |
увеличивает длину строки на m байт. | |
resize_increment |
static size_t resize_increment(size_t ri = 64); |
устанавливает |
|
set_case_sensitive |
static int set_case_sensitive(int tf = 1); |
устанавливает |
|
set_paranoid_check |
static int set_paranoid_check(int ck = 1); |
||
skip_whitespace |
static int skip_whitespace(int sk = 1); |
Устанавливается в единицу, чтобы пропускать |
|
|
TSubString |
удалят из текущей строки все пробельные или заполняющие с символы вначале, в конце строки или в обоих направлениях, и выдается ссылка на результирующую строку типа TSubString. | |
|
string
|
возвращает подстроку из текущей строки, начинающейся с позиции |
|
|
TSubString
TSubString
|
создает объект типа TSubstring, содержащей копию строки |
|
to_lower |
void to_lower(); |
переводит строку в нижний регистр; | |
to_upper |
void to_upper(); |
переводит символы строки в верхний регистр. | |
| Protected Member Functions | |||
valid_element |
int valid_element( size_t |
возвращает 1, если в позиции |
|
valid_index |
int valid_index( size_t |
возвращает 1, если |
|
assert_element |
|||
assert_index |
|||
|
|||
| Operators | =; +=; +=; +; []; (); ==; !=; <; <=; >; >=; |
||
| Related Global Operators and Functions | >>; <<; +; getline; to_lower; to_upper; |
||
| Функция/Метод | Описание | Пример |
|---|---|---|
| Java. Методы класса String | ||
charAt(Позиция) |
Возвращает символ строки, стоящий в заданной позиции. Позиции отсчитываются с 0. | |
compareTo( Любая_строка) |
Сравнивает вызывающий строковый фрагмент и строковый аргумент на предмет первенства в |
String .Выражение: выдаст 0.Выражение: |
|
Возвращает true, если вызывающий объект является строкой и равен объекту Другая_строка. В противном случае возвращает false. |
|
equalsIgnoreCase (Другая_строка) |
Возвращает true, если вызывающий объект является строкой и равен объекту Другая_строка без учета регистра букв. В противном случае возвращает false. |
|
|
Возвращает позицию первого вхождения строки: Любая_строка в строковом объекте. Позиция отсчитывается с 0. Возвращает "-1", если Любая_строка не найдена. | |
|
Возвращает позицию первого вхождения строки: Любая_строка в строковом объекте, после позиции Начало. Позиция отсчитывается с 0. Возвращает "-1", если Любая_строка не найдена. | |
|
Возвращает позицию последнего вхождения строки: Любая_строка в строковом объекте. Позиция отсчитывается с 0. Возвращает "-1", если Любая_строка не найдена. | |
length() |
Возвращает длину строкового фрагмента. | String strgreeting = "Привет!". Выражение: Strgreeting.length() возвращает 7. |
|
Возвращает подстроку строкового фрагмента, начинающегося с позиции Начало и оканчивающегося концевым символом строки. Позиции отсчитываются от 0. |
|
|
Возвращает подстроку строкового фрагмента, начинающегося с позиции Начало и оканчивающегося позицией Конец. Позиции отсчитываются от 0. |
|
toLowerCase() |
Возвращает исходную строку символов, все символы у которой - строчные. | |
toUpperCase() |
Возвращает исходную строку символов, все символы у которой - прописные. | |
|
Удаляет в возвращаемой строке ведущие и концевые пробелы. | |
| Функция/Метод | Описание | Пример |
|---|---|---|
| VB Script функции | ||
|
Функция возвращает ASCII |
- возвращает 65, а - 82. |
|
Эта функция возвращает ASCII символ по ASCII коду. | - возвращает "A". |
Instr |
Функция используется для получения местоположения одной строки в другой. Функция имеет следующий синтаксис: Instr([Begin_Pos], Str1, Str2, [ComparisionType]), - где Begin_Pos - необязательный элемент, задающий начальную позицию поиска, Str1 - строка, в которой происходит поиск, Str2 - исходная строка, ComparisionType - способ сравнения: 0 - бинарное сравнение (по умолчанию), 1 - сравнение с игнорированием регистра букв. |
|
LCase |
Возвращает исходную строку символов, все символы у которой - строчные. | |
Left |
Функция возвращает определенное число символов из строки. | Выражение: Left(" - возвращает " |
|
Функция возвращает число символов в строке. | - выдает число 7. |
LTrim |
Функция удаляет предшествующие пробелы из строки. | |
|
Возвращает определенное число символов из строки. | Выражение: - возвращает " |
Right |
Функция возвращает определенное число символов с правой стороны строки. | Right(" - возвращает "Script" |
RTrim |
Функция удаляет последующие пробелы из строки. | |
Str |
Эта функция преобразует цифровое выражение в строку. | |
StrComp |
Эта функция используется для сравнения двух строк в |
|
String |
Функция предназначена для заполнения строки определенным числом символов. | String(10, "A") - вернет строку "AAAAAAAAAA". |
|
Функция удаляет и предшествующие, и последующие пробелы из строки. | |
UCase |
Возвращает исходную строку символов, все символы у которой - прописные. | |
| Функция/Метод | Описание | Пример |
|---|---|---|
| Язык Си. Функции ANSI C | ||
#include <string.h> |
Заголовочный файл для этих функций | |
int |
Возвращает длину строки str1 (позицию его символа \0). | |
char* strerror( char *str ); |
||
char * |
Конкатенация строки str1 и str2, но в строку n записывается не более n символов. Возвращается значение строки str1 или NULL при неудаче конкатенации. | |
int |
Сравниваются не более чем n символов в строке str1 со строкой str2 в лексикографическом порядке. Возвращает: "0" - если строки совпали, "-1" - если str1 < str2, "1" - если str1 > str2. | |
char * |
Копирует строку str2 в строку str1, но не более чем n символов. Возвращается значение строки str1 или NULL при неудаче копирования. | |
char * |
Ищется первое вхождение символа из строки str2 в строке str1. Возвращает указатель на этот символ или NULL, если символы не обнаружены. | |
char * |
Ищется последнее вхождение символа из строки str2 в строке str1. Возвращает указатель на этот символ или NULL, если символы не обнаружены. | |
char * |
Ищется первое вхождение символа, которого нет в строке str2, в строке str1. Возвращает указатель на этот символ или NULL, если символы не обнаружены. | |
char * |
Ищется первое вхождение подстроки str2 в строке str1. Возвращается указатель на заданную подстроку или NULL в случае ее необнаружения. | |
char *strtok( char *str1; char *str2 ); |
Функция разбивает строку str1 на слова, вставляя после каждого из них символ '\0'. Символы, являющиеся разделителями слов, перечислены в строке str2. При первом вызове функция возвращает указатель на str1. При последующем вызове (с параметром str1 == NULL) она возвращает указатели на другие слова в строке str1. Функция возвращает NULL, если все слова закончились. | |
char *memchr( char *buf, char |
Функция ведет поиск первого вхождения символа |
|
int memcmp( char *buf1, char *buf2, |
Сравниваются не более чем |
|
char *memcpy( char *dst1, char *src2, |
Копирует строку src2 в строку dst1, но не более чем n символов. Возвращается значение строки dst1. Реализация функции гарантирует, что перекрывающие участки будут правильно обработаны. | |
| Функции TURBO C и |
||
#include <string.h> |
Заголовочный файл для этих функций | |
int memicmp(char *buf1, char *buf2, |
Сравниваются не более чем |
|
char *memmove(char *buf1, char *buf2, |
Функция полностью идентична функции memcpy. При копировании перекрывающихся участков гарантируется, что эти участки скопируются правильно. | |
char *memset( char *dest, char |
Функция присваивает буферу dest повторяющиеся |
|
char *strnset( char *str1, char |
Функция присваивает буферу str1 повторяющиеся не более чем n число раз значения символа |
|
int strnicmp(char *str1, char *str2, |
Сравниваются не более чем n символов в строке str1 со строкой str2 в лексикографическом порядке. Возвращает: "0" - если строки совпали, "-1" - если str1 < str2, "1" - если str1 > str2. Регистр символов игнорируется. | |
char *strlwr( char *str ); |
Переводит все символы в строке str в нижний регистр. Возвращает значение указателя на строку str. | |
char *strrev( char *str ); |
Функция меняет порядок следования символов в строке str. Возвращает значение указателя на строку str. | |
char *strupr( char *str ); |
Переводит все символы в строке str в верхний регистр. Возвращает значение указателя на строку str. | |
| Функции TURBO C (дополнительно) | ||
#include <string.h> |
Заголовочный файл для этих функций | |
char *strerror( int number ); |
||
| Язык Си. Функции ANSI C | ||
#include <stdio.h> |
Заголовочный файл для этих функций | |
int sprintf( char * |
Функция форматирует и записывает в строку |
| Функция/Метод | Синтаксис | Описание | Пример |
|---|---|---|---|
| Perl Функции для работы со скалярами | |||
chomp |
chomp СПИСОК |
Удаляет из каждого |
|
chop |
chop СПИСОК |
Удаляет из каждого |
|
|
|
Возвращает символ по заданному числовому коду |
|
crypt |
crypt ТЕКСТ, ШИФР |
Шифрует ТЕКСТ с использованием заданного параметра шифра. |
|
|
|
Интерпретирует строковое ВЫРАЖЕНИЕ как шестнадцатеричное число и вычисляет его десятичный эквивалент. При использовании без параметров вызов аналогичен вызову |
|
index |
index СТРОКА, ПОДСТРОКА[, ПОЗИЦИЯ] |
Возвращает позицию первого вхождения указанной подстроки в заданную параметром СТРОКА строку или "-1", если подстрока не найдена. Если задан параметр ПОЗИЦИЯ, то поиск начинается с заданной позиции в строке (нумерация символов в строке начинается с "0"). | |
lc |
lc ВЫРАЖЕНИЕ, |
Функция преобразует все прописные буквы строкового параметра ВЫРАЖЕНИЕ в строчные буквы и возвращает полученную строку. В случае применения use local при преобразовании используются текущие локальные установки. При использовании без параметров функция аналогична вызову lc $_ . | |
lcfirst |
lcfirst ВЫРАЖЕНИЕ |
Преобразует первый символ строкового параметра ВЫРАЖЕНИЕ в нижний регистр и возвращает полученную строку. В случае применения use local при преобразовании используются текущие локальные установки. При использовании без параметров вызов функции аналогичен вызову lcfirst $_ . | |
length |
length ВЫРАЖЕНИЕ |
Возвращает количество байтов в строке, являющегося значением параметра ВЫРАЖЕНИЕ. При использовании без параметров функция эквивалентна вызову length $_ . | |
oct |
oct ВЫРАЖЕНИЕ |
Интерпретирует строковое ВЫРАЖЕНИЕ как восьмеричное число и вычисляет его десятичный эквивалент. Если строка начинается с символов 0x, то его содержимое интерпретируется как шестнадцатеричное число. При использовании без параметров вызов функции аналогичен вызову oct $_ . | |
ord |
ord ВЫРАЖЕНИЕ |
Возвращает числовой ASCII код первого символа строки, являющегося значением параметра ВЫРАЖЕНИЕ. При использовании без параметров вызов функции аналогичен вызову ord $_ . | |
pack |
pack ШАБЛОН, СПИСОК |
Упаковывает массив или список значений в двоичную структуру в соответствии с заданным шаблоном, представляющим собой последовательность символов, которые задают порядок и тип значений. Возвращает строку, содержащую полученную структуру. | |
|
|
В списковом контексте возвращает список значений, состоящий из элементов, заданным параметром СПИСОК списка, но в обратном порядке, начиная с последнего символа. В скалярном контексте соединяет все элементы списка в одну строку, состоящую из символов полученной строки, но в обратном порядке. | |
rindex |
rindex СТРОКА, ПОДСТРОКА[, ПОЗИЦИЯ] |
Возвращает позицию последнего вхождения указанной подстроки в заданную параметром СТРОКА строку или "-1", если подстрока не найдена. Если задан параметр ПОЗИЦИЯ, то поиск начинается до заданной позиции в строке (включая символ в этой позиции). | |
sprintf |
sprintf ФОРМАТ, СПИСОК |
Возвращает строку, представляющую собой форматный вывод |
|
|
|
Находит и возвращает из параметра СТРОКА, подстроку длиной, равной значению параметра ДЛИНА, начиная с символа, заданного параметром СМЕЩЕНИЕ. Если значение СМЕЩЕНИЕ отрицательно, то извлечение начинается с последнего символа строки. Если значение ДЛИНА отрицательно, то от конца строки отсекаются количество символов, равное абсолютному значению этого параметра. Если задан строковый параметр ЗАМЕЩЕНИЕ, то найденная подстрока замещается ею в параметре СТРОКА, который в этом случае должен быть l-Значением. | |
uc |
uc ВЫРАЖЕНИЕ, |
Функция преобразует все строчные буквы строкового параметра ВЫРАЖЕНИЕ в прописные буквы и возвращает полученную строку. В случае применения use local при преобразовании используются текущие локальные установки. При использовании без параметров вызов функции аналогичен вызову uc $_ . | |
ucfirst |
ucfirst ВЫРАЖЕНИЕ |
Преобразует первый символ строкового параметра ВЫРАЖЕНИЕ в верхний регистр и возвращает полученную строку. В случае применения use local при преобразовании используются текущие локальные установки. При использовании без параметров вызов функции аналогичен вызову ucfirst $_ . | |
| Лексикографический порядок ( |
|||
| Perl Функции для работы со скалярами (поиск и замена фрагментов) | |||
|
|
Возвращает значение указателя позиции в строке после последней выполненной для нее операции поиска по образцу: m//g. Если используется в левой части операции присвоения, то изменяет значение указателя, влияя на \G в регулярном выражении. При использовании без параметров данный вызов эквивалентен вызову: |
|
quotemeta |
quotemeta ВЫРАЖЕНИЕ quotemeta |
Возвращает строку, в которой перед каждым неалфавитно-цифровым символом поставлена обратная черта. Значение параметра: ВЫРАЖЕНИЕ - интерпретируется как строка. (Внутренняя функция реализации |
|
split |
split /ОБРАЗЕЦ/[.ВЫРАЖЕНИЕ[.ПРЕДЕЛ]] split |
Разбивает строку, являющуюся значением параметра: ВЫРАЖЕНИЕ, на массив строк, с использованием разделителя, определяемым регулярным выражением в параметре: ОБРАЗЕЦ. В списковом контексте возвращает полученный массив, в скалярном контексте - количество найденных строк разбиения. Если задан параметр: ПРЕДЕЛ, разбивает на не более чем заданное этим параметром число строк. Если параметр: ВЫРАЖЕНИЕ - не задан, то используется внутренняя специальная переменная интерпретатора Perl $_, Если не задан образец, то разбивает по |
|
|
|
Оптимизирует строковые данные параметра: ВЫРАЖЕНИЕ - для дальнейшего использования в повторных операциях поиска по образцу. В цикле с несколькими операциями поиска может сэкономить время выполнения. При использовании без параметров функция эквивалентна: |
|
| Perl Функции для работы с массивами скаляров | |||
delete |
delete ВЫРАЖЕНИЕ |
Удаляет из массива скаляров его элемент или фрагмент, заданный параметром: ВЫРАЖЕНИЕ. Если удаляется последний элемент массива, то автоматически изменяется длина массива, если удаляются элементы из его середины, то оставшиеся элементы не сдвигаются (для сдвига используйте функцию |
|
exists |
exists ВЫРАЖЕНИЕ |
Проверяет, был ли когда-либо инициализирован в массиве скаляров элемент, заданный параметром: ВЫРАЖЕНИЕБ, например, $array[3], даже если сейчас его значение не определено. Если да, то возвращает значение "истина", иначе - "ложь". Функция exist работает с массивами скаляров только в Perl версий 5.6.0 и выше. | |
|
|
Удаляет из массива скаляров последний элемент и возвращает его значение. Если массив пустой, то возвращает неопределенное значение undef. Если функция вызывается без параметров, то главной программе вызов эквивалентен |
|
push |
push МАССИВ, СПИСОК |
Рассматривает массив скаляров, заданный параметром: МАССИВ, как стек и добавляет после его последнего элемента элементы списка, заданные параметром: СПИСОК. Возвращает количество элементов полученного массива. | |
shift |
shift МАССИВ shift |
Удаляет из массива скаляров первый элемент и возвращает его значение. После удаления элементы оставшиеся элементы сдвигаются влево: второй элемент становится первым, третий - вторым и т.д. Если массив пустой, то возвращает неопределенное значение undef. Если функция вызывается без параметров, то главной программе вызов эквивалентен shift @ARGV, а в подпрограмме shift @_. | |
|
|
Удаляет из массива количество элементов, заданное значением параметра: КОЛИЧЕСТВО, начиная с элемента, заданное значением параметра: НОМЕР. В случае задания параметра СПИСОК заменяет указанные в нем элементы списка. В списковом контексте возвращает удаленные элементы; в скалярном контексте - последний удаленный элемент. Если параметр:КОЛИЧЕСТВО не задан, то удаляются все элементы после элемента с номером, определенным значением параметра: НОМЕР. | |
unshift |
unshift МАССИВ, СПИСОК |
Добавляет элементы списка, определенного параметром: СПИСОК, в начало массива, заданного параметром МАССИВ. Выполняет действия, противоположные действиям функции shift. | |
grep |
grep БЛОК СПИСОК grep ВЫРАЖЕНИЕ, СПИСОК |
||
join |
join ВЫРАЖЕНИЕ, СПИСОК |
Рассматривает все элементы списка, определенного параметром: СПИСОК, как строковые значения, соединяет их в одну строку, вставляя между ними разделитель, равный значению параметра: ВЫРАЖЕНИЕ, и возвращает полученную строку. | |
map |
map БЛОК СПИСОК map ВЫРАЖЕНИЕ, СПИСОК |
||
pack |
pack ВЫРАЖЕНИЕ, СПИСОК |
||
|
|
В списковом контексте возвращает список значений элементов, заданный параметром: СПИСОК, в обратном порядке, начиная с последнего элемента. В скалярном контексте соединяет все элементы в одну строку и возвращает строку, в которой символы расположены в обратном порядке, начиная с последнего символа. | |
sort |
sort [ПОДПРОГРАММА] СПИСОК sort [БЛОК] СПИСОК |
Сортирует список значений, заданный в параметре: СПИСОК. Если параметры БЛОК и ПОДПРОГРАММА не заданы, то используется стандартная процедура сравнения строковых данных. Если они заданы, то операторы блока или подпрограммы используются в качестве процедуры сравнения при сортировке элементов списка. В этом случае в теле блока или подпрограммы в последнем операторе следует использовать операцию <=> или cmp в зависимости от сортировки соответственно числовых и строковых данных. Возвращает список, элементами которого являются отсортированные элементы исходного списка. | |
unpack |
unpack ШАБЛОН, ВЫРАЖЕНИЕ |
||
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.