Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Подбельский учебник с++ / Подбельский - главы 10-12

.pdf
Скачиваний:
28
Добавлен:
22.05.2015
Размер:
1.46 Mб
Скачать

516

Язык Си++

 

Таблица П4.4 (продолжение)

Функция

Прототип и краткое описание действий

getfUlpattern

void far getfillpattern(char far *pattern);

 

Получение кодов, применяемых пользователем для зада-

 

ния шаблона заполнения экрана или его области

getfillsettings

void far getfillsettings(struct

 

fillsettingstype far *fillinfo);

 

Возвращает в структуре fi l l i n f o значения параметров

 

заполнения и цвета экрана

getgraphmode

int far getgraphmode(void);

 

Возвращает номер графического режима

getimage

void far getimage(int left, int top, int

 

right, int bottom, void far «bitmap);

 

Получение и сохранение в области памяти, на которую

 

указывает bitmap, окна экрана, заданного координатами

 

вершин

getlinesettings

void far getlinesettings(struct

 

linesettingstype far *lineinfo);

 

Возвращает в структуре lineinfо значения параметров

 

линии

getmaxcolor

int far getmaxcolor(void);

 

Возвращает наибольший номер цвета, который возможно

 

установить в текущем режиме графического драйвера с

 

помощью функции setcolor ()

getmaxmode

int far getmaxmode(void);

 

Возвращает наибольший номер режима, который возмож-

 

но установить для текущего графического драйвера

getmodename

char *far getmodename (int mode_number) ;

 

Возвращает указатель на строку с названием графическо-

 

горежимаmode_number

getmoderange

void far getmoderange(int graphdriver, int

 

far *lomode, int far *himode);

 

Возвращает диапазон доступных графических режимов

 

для графического драйвера graphdriver

getmaxx

int far getmaxx(void);

 

Возвращает целое значение, равное размеру экрана по

 

горизонтали (максимальное значение х)

Приложение 4. Графическая библиотека ВС++

517

 

 

 

Таблица П4.4 (продолжение)

Функция

Прототип и краткое описание действий

 

getraaxy

i n t far getmaxy(void);

 

 

Возвращает целое значение, равное размеру экрана по

 

 

вертикали (максимальное значение у)

 

getpalette

void far getpalette(struct palettetype far

 

 

•palette);

 

 

Выдает указатель palette на структуру типа palette,

 

 

содержащую информацию о текущей палитре (наборе цве

 

тов)

 

getpalettesize

int far getpalettesize(void);

 

 

Возвращает количество цветов, доступных в текущем гра-

 

фическом режиме

 

getpixel

unsigned far getpixel(int x, int y);

 

 

Возвращает цвет заданной (х, у) точки

 

gettextsettings

void far gettextsettings(struct

 

 

textsettingstype far *texttypeinfo);

 

 

Возвращает в структуре texttypeinfо значения пара-

 

 

метров текста

 

getviewsettings

void far getviewsettings (struct

 

 

viewporttype far «viewport);

 

 

Возвращает в структуре viewport значения параметров

 

 

окнаэкрана

 

getx

int far getx(void);

 

 

Возвращает целое значение координаты х текущей пози-

 

 

ции на экране

 

;ety

int far gety(void);

 

 

Возвращает целое значение координаты у текущей пози-

 

 

ции на экране

 

graphresult

int far graphresult(void);

 

 

Возвращает номер ошибки графической операции (целое

 

число от -15 до -1); значение 0 говорит об отсутствии

 

 

ошибок

 

grapherrormsg

char *far grapherrormsg(int errorcode);

 

 

Возвращает указатель на строку, содержащую описание

 

 

шибки номер errorcode

 

518

Функция

imagesize

textheight

Язык Си++

ТаблицаU4А(продолжение)

Прототип и краткое описание действий

unsigned far imagesize(int left, int top,

int right, int bottom);

Возвращает объем буфера, нужного для сохранения графической информации в окне экрана с заданными вершинами

int far textheight(char far *textstring); Возвращает целое значение высоты в пикселах символов из строки texts tring

textwidth

int far textwidth(char far *textstring);

Возвращает в пикселах целое значение ширины строки

 

 

символов texts tr ing

ПРИЛОЖЕНИЕ 5

КЛАССЫИКОМПОНЕНТНЫЕФУНКЦИИ БИБЛИОТЕКИ ПОТОКОВОГО ВВОДА-ВЫВОДА В СИ++

О библиотеке классов потокового ввода-вывода подробно говорилось в главе 11. В данном приложении приведены только краткие сведения о компонентных функциях и других средствах, использование которых позволяет реализовать обмен с потоками. Многие из перечисленных ниже функций уже рассмотрены в главе 11. Там же приведены сведения об иерархии классов в библиотеке. Подробное изучение остальных средств потокового ввода-вывода потребует обращения к документации по конкретному компилятору.

 

 

Таблица175.1

 

 

Компонентные функции класса ios

Функция

 

Прототип и краткое описание действий

bad

in t bad() ;

 

При ошибке возвращает ненулевое значение.

bitalloc

s t a t i c long b i t a l l o c () ;

 

Возвращает установку флагов. Полученное значение может быть

 

использовано для очистки, установки или проверки флагов.

clear

void clea r (in t =» 0) ;

 

Устанавливает состояние потока в нуль.

eof

in t eof( ) ;

 

Возвращает ненулевое значение, если имеет место условие конца

 

файла (EOF).

fail

int fail () ;

 

Возвращает ненулевое значение, если операция обмена с потоком

 

терпит неудачу.

fill

char

f i l l ( ) ;

 

Возвращает текущее значение символа заполнения потока,

 

char

f i l l ( c h a r ) ;

 

Заменяет значением параметра символ заполнения потока; воз-

 

вращает ранее установленное значение символа заполнения.

520

 

Язык Си++

 

 

Таблица П5.1 (продолжение)

Функция

 

Прототипикраткоеописаниедействий

flags

long

flags();

 

Возвращает текущее значение флагов форматирования.

 

long flags(long);

 

Устанавливает флаги форматирования по значению параметра;

 

возвращает ранее установленное значение флагов.

good

i n t good () ;

 

Возвращает ненулевое значение, если не установлен ни один флаг

 

состояния (ошибок нет).

precision

int

precision();

 

Возвращает текущее значение точности вещественных чисел,

 

int precision(int);

 

Устанавливает точность вещественных чисел по значению пара-

 

метра; возвращает предыдущее значение.

rdbuf

streambuf* rdbuf О;

 

Возвращает указатель на буфер (объект класса bufstream), свя-

 

занный с потоком.

restate

int

rdstate();

 

Возвращает текущее состояние потока.

setf

long

setf (long);

 

Устанавливает флаги по значению параметра; возвращает

 

предыдущие значения флагов

 

long self(long _setbits, long _field) ;

 

Сбрасывает те биты состояния, которые отмечены в _field,

 

затем устанавливает биты по значению _setbits.

tie

ostream+ tie() ;

 

Возвращает указатель на взаимосвязанный (tied) поток,

 

ostream* tie(ostream*);

 

Организует поток, взаимосвязанный с потоком, на который ука-

 

зывает ostream*; возвращает указатель на предыдущий взаимо-

 

связанный поток, если такой есть.

unself

long unself(long);

 

Очищает биты состояния потока, отмеченные переданным пара-

метром; возвращает предыдущее значение битов.

Приложение 5. Классы и функции библиотеки ввода-вывода в Си++ 521

 

 

 

 

 

Таблица 175.1 (продолжение)

Функция

 

 

Прототипикраткоеописаниедействий

 

width

int width () ;

 

 

 

 

 

 

 

Возвращает текущее значение ширины,

 

 

 

 

int

width(int);

 

 

 

 

 

 

 

Устанавливает ширину, равной значению переданного парамет-

 

ра; возвращает предыдущее значение.

 

 

 

 

 

 

Компонентные функции класса istream

 

Таблица П5.2

 

 

 

 

 

Функция

 

 

Прототипикраткоеописаниедействий

 

gcount

int

gcount();

 

 

 

 

 

 

 

Возвращает число символов, извлеченных из потока последним

 

обращением из прикладной программы.

 

 

 

get

in t get () ;

 

 

 

 

 

 

 

Передает из входного потока в прикладную программу следую-

 

щий символ или EOF.

 

 

 

 

 

 

 

i n t

g e t ( s i g n e d char * , i n t

len,char =

' \ n ' ) ;

 

i n t

get(unsigned char * , i n t len,char

=

' \ n ' ) ;

 

Извлекает из входного потока символы и помещает их в буфер,

 

на начало которого указывает char *. Передача символов за-

 

вершается, если прочитано (len - 1) байтов, или встретился сим-

 

вол-разделитель (третий параметр в функции), или достигнут

 

конец файла EOF. Завершающий нуль-символ всегда помещается

 

в буфер, обозначая конец принятой строки, разделитель

 

 

(последний параметр) не переносится в строку,

 

 

 

 

int get(unsigned chart);

 

 

 

 

 

 

 

int get(signed chart);

 

 

 

 

 

 

 

Извлекает из входного потока символ и помещает его в байт, на

 

который указывает параметр chart,

 

 

 

 

 

i n t

get(streambuffi,char

=

' \ n ' ) ;

 

 

 

 

Извлекает символы из входного потока и помещает их в буфер

 

потока, на который ссылается streambuf. Чтение символов

 

прекращается, если в потоке встретился символ-разделитель

 

(второй параметр).

 

 

 

 

 

 

getline

istream4

g e t l i n e ( s i g n e d

char

*,int,char

=

' \ n ' ) ;

 

istream

g e t l i n e ( u n s i g n e d

char

*,int,char

=

' \ n ' ) ;

 

Совпадает с get () с тремя параметрами, но символ-разделитель

 

также помещается в принятую строку символов.

 

 

 

522

 

ЯзыкСи++

 

 

Таблица П5.2 (продолжение)

Функция

 

Прототипикраткоеописаниедействий

ignore

istreams ignore(int n « l,int delim « EOF);

 

Пропускает до п символов входного потока; останавливается,

 

если встретился разделитель (второй параметр), по умолчанию

 

равныйEOF.

peek

int peek О;

 

Извлекает следующий символ из входного потока.

putback

istreams

putback(char);

 

Помещает символ назад во входной поток.

read

istreamS

read(signed char *,int);

istream£

read(unsigned char * , i n t ) ;

 

 

Извлекает из входного потока заданное вторым параметром чис-

 

ло символов и помещает их в массив, на начало которого указы-

 

вает первый параметр.

seekg

istreamfi

seekg(long);

 

Устанавливает указатель чтения входного потока на абсолютную

 

позицию, заданную параметром long,

 

istreamfi

seekg (long, seek__dir) ;

 

Перемещает указатель чтения входного потока на число байтов,

 

заданное первым параметром. Второй параметр задает точку

 

отсчета (0 - начало потока; 1 - текущая позиция потока; 2 - ко-

 

нец потока).

telig

long t e l i g ( ) ;

 

Возвращает текущую позицию указателя чтения входного пото-

 

ка.

 

 

 

 

 

 

Таблица П5.3

 

Компонентные функции класса ostream

Функция

 

Прототипикраткоеописаниедействий

flush

оstreams

flush();

 

Флэширует внутренний буфер выходного потока.

put

оstreams put(char);

 

Помещает заданный параметром char символ в выходной поток.

seekp

оstreams

seekp(long);

 

Устанавливает указатель записи выходного потока на абсолют-

 

ную позицию, заданную параметром long.

 

 

 

 

 

Приложение 5. Классы и функции библиотеки ввода-вывода в Си++ 523

 

Таблица П5.3 (продолжение)

Функция

Прототипикраткоеописаниедействий

 

ostreamS seekp(long,seek_dir);

 

Перемещает указатель текущей позиции выходного потока на

 

число байтов, заданное первым параметром. Второй параметр

 

задает точку отсчета (0 - начало; 1 - текущая позиция; 2 - конец

 

потока).

tellp

long tellp() ;

 

Возвращает текущую позицию указателя записи выходного по-

 

тока.

write

ostreamS write(const signed char *,int n);

 

ostreamS write(const unsigned char *,int n);

 

Помещает в выходной поток п символов из массива, на который

 

указывает char *. Нуль-символы включаются в число перено-

 

симых символов.

 

 

ТаблицаП5.4

Флаги класса ios, управляющие форматированием ввода/вывода

Константа Знамение

Назначение

skipws

0x0001

Игнорировать пробельные символы при вводе.

left

0x0002

"Прижимать" значение к левой стороне поля.

right

0x0004

"Прижимать" значение к правой стороне поля.

internal

0x0008

Поместить разделительные символы после знака

 

 

или основания системы счисления (ОСС).

dec

0x0010

Десятичнаясистемасчисления(ОСС = 10).

oct

0x0020

Восьмеричная система счисления (ОСС = 8).

hex

0x0040

Шестнадцатеричнаясистемасчисления(ОСС = 16)

showbase

0x0080

Указывать ОСС при выводе.

showpoint

0x0100

Печатать десятичную точку и следующие за ней

 

 

нули при выводе вещественных чисел.

uppercase

0x0200

Шестнадцатеричные цифры печатать на верхнем

 

 

регистре.

524

 

Язык Си++

 

 

Таблица 775.4 (продолжение)

Константа

Значение

Назначение

showpos

0x0400

Добавлять • +' при выводе положительных чисел.

scientific

0x0800

Использовать формат 1.2345Е2 для вывода веще-

 

 

ственных чисел (экспоненциальная или научная

 

 

нотация).

fixed

0x1000

Использовать формат 123.45 для вывода веще-

 

 

ственных чисел (с фиксированной точкой).

unitbuf

0x2000

Флэшировать потоки после операции «.

stdio

0x4000

Флэшировать s t d o u t , s t d e r r после операции «.

Таблица 175.5

Константы класса ios для "очистки" флагов форматирования

Константа

 

'Сбрасываемые" флаги

Действие

basefield

i o s

:hex, ios: :oct,

На основание системы счис-

 

i o s

:dec

ления

floatfield

i o s

: fixed,

На представление веществен-

 

i o s : scientific

ных чисел.

adjustifield

i o s

: left, ios : : right,

На выравнивание значений в

 

i o s

:internal

поле вывода.

 

Таблица775.6

 

Функции-манипуляторы

Манипу-

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

лятор

 

dec

Устанавливает десятичное основание системы счисления.

hex

Устанавливает шестнадцатеричное основание системы счисле-

 

ния.

oct

Устанавливает восьмеричное основание системы счисления.

ws

При вводе позволяет извлекать из входного потока обобщенные

 

пробельные символы.

Приложение 5. Классы и функции библиотеки ввода-вывода в Си++ 525

 

 

Таблица 775.6 (продолжение)

Манипу-

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

лятор

 

endl

При выводе помещает в поток символ новой строки и флэширует

 

буфер потока.

 

ends

При выводе помещает в поток символ конца строки '\0'

flush

Флэширует буфер потока ostream.

 

 

Таблица 775.7

 

Параметризованные функции-манипуляторы - файл iomanip. h

 

Название

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

setbase(int = 0) Устанавливает основание системы счисления (0 - при выводе - десятичное; при вводе - внутреннее представление вводимых цифр соответствует правилам ANSI для языка Си; 8 - восьмеричное; 10 - десятичное; 16 - шестнадцатеричное).

resetiosflags(Iong)

Очищает форматные флаги, используя значение пара-

 

метра.

setiosflags(Iong)

Устанавливает форматные флаги, используя значение

 

параметра.

setfUl(int)

Устанавливает символ-заполнитель.

setprecision(int)

Устанавливает по значению параметра точность пред-

 

ставления вещественных чисел.

setw(int)

Устанавливает по значению параметра ширину поля

 

ввода или вывода.

 

Таблица 775.8

 

Компонентные функции класса f i l e b u f

Функция

Прототип и краткое описание действий

attach

filebuf* attach(int fd);

 

Связывает с объектом класса filebuf файл с дескриптором

 

f d. Если файл уже открыт, возвращает NULL.

526

Функция close

fd

Язык Си++

ТаблицаП5Я(продолжение)

Прототипикраткоеописаниедействий

fiiebuf* close();

Флэширует и закрывает файл. Возвращает ссылку на буфер файла, либо 0 при ошибке.

int fd() ;

Возвращает дескриптор открытого файла, связанного с заданным объектом класса fiiebuf, либо EOF.

is_rtl_open i n t is_rtl_open() ;

 

Возвращает не равное нулю целое число, если с заданным объ-

 

ектом связан открытый файл.

open

fiiebuf* open(const char*, i n t mode, in t prot =

fiiebuf::openprot);

 

 

Открывает файл, на спецификацию которого указывает char*,

 

в режиме mode и присоединяет к нему объект класса fiiebuf.

 

Третий параметр задает защиту файла.

Класс буферизации данных в потоках fiiebuf для упрощения изложения не показан в иерархии классов (см. рис. 11.3). Он является базовым для всех классов ввода-вывода, с которыми мы познакомились, и должен использоваться при создании на их основе новых собственных классов. Среди компонентных функций класса filebuf не показаны виртуальные функции.

Таблица П5.9

Компонентные функции классов if stream, of stream, f stream

Функция Прототипикраткоеописаниедействий

open

void open(const char*, in t mode, in t =

 

filebuf::openprot);

 

Открывает файл с буфером, на который указывает первый пара-

 

метр. Второй параметр - режим использования файла. Третий

 

параметр - защита файла.

rdbuf

filebuf* rdbuf();

 

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

Приложение 5. Классы и функции библиотеки ввода-вывода в Си++ 527

_

.

 

Таблица П5.10

Режимыфайла,устанавливаемыепараметромmodeвфункции open()

Обозначение Значение

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

ios::in

 

0x01

Открыть только для чтения(режим по умолча-

 

 

 

ниюустанавливаетсядляпотоковкласса

 

 

 

ifstream).

ios::out

 

0x02

Открыть толькодля записи (режим по умолчанию

 

 

 

 

 

 

устанавливается для потоков класса oifstream).

ios::ate

 

0x04

Открытьдлязаписив конецфайла. Еслифайлне

 

 

 

существует - создать его.

ios::app

 

0x08

Открытьврежимедополнения.

ios::trunc

 

0x10

Открыть,уничтоживсодержимоефайла

 

 

 

(устанавливаетсяпоумолчанию,еслиустановлен

 

 

 

режим out, либо один из режимов at e или арр).

ios::nocreate

 

0x20

Открытьтолькосуществующийфайл, еслифайла

 

 

 

не существует-установить состояние ошибки.

ios::noreplace

0x40

Создать и открыть только не существующий

 

 

 

файл. Если файл существует - установить состоя-

 

 

 

ние ошибки.

ios::binary

 

0x80

Открытьдлядвоичного обмена.

ПРИЛОЖЕНИЕ 6

БИБЛИОТЕЧНЫЕКЛАССЫИИХ КОМПОНЕНТНЫЕ ФУНКЦИИ

Среди дополнительных средств, не входящих в собственно язык Си++, но отмечаемых в проектах стандарта и входящих в конкретные реализации, важное место занимают классы. Наиболее полезные с точки зрения пользователей и разработчиков компиляторов классы входят в библиотеки классов и поставляются вместе с компиляторами. Здесь можно отметить библиотеку классов потокового ввода-вывода, библиотеку контейнерных классов, а также некоторое количество специализированных классов. Библиотека потокового ввода-вывода подробно разобрана в главе 11, а общий список ее компонентных функций дан в Приложении 5.

Контейнерные классы позволяют программисту с минимальными затратами создавать динамические массивы, списки, деревья, очереди, стеки, включающие элементы разных типов. В настоящее время контейнерные классы входят в наиболее передовые реализации компиляторов, но не стандартизованы. Контейнерные классы заслуживают отдельного тщательного изучения при подготовке профессиональных программистов. Объем настоящего пособия не позволяет рассмотреть их подробно, а бойкое перечисление имен и названий классов ничего читателю не даст. Некоторую информацию о возможностях контейнерных классов можно найти в работе [19]. Однако за подробностями следует обращаться к технической документации по конкретным компиляторам и библиотекам классов.

В стандартные библиотеки компиляторов входят и менее объемные, но не менее полезные для частных применений классы. Остановимся на двух их них.

Класс complex становится доступным в программе после подключения заголовочного файла complex. h. В этом файле содержатся как определения класса complex, так и все операции-функции, необходимые для работы с его объектами, т.е. с комплексными числами, а именно:

все арифметические операции (+, * и т.д.);

операции присваивания (=,+= ит.д.);

потоковые операции записи « и чтения »;

обычные математические функции, которые вызываются только

втом случае, если фактический параметр имеет тип complex.

Приложение 6. Библиотечные классы и их компонентные функции

529

Вклассе complex имеются две формы конструктора объектов: complex complex();

complex complex (double real, double iznag = 0) ;

где complex - структура, описанная в файле math.h следующим образом:

struct complex { double x, у;

};

x и у - соответственно вещественная и мнимая части комплексного числа.

При использовании первого конструктора создается комплексное число с нулевыми вещественной и мнимой частями (х=*о, y==o). Во второй форме можно задавать либо вещественную и мнимую части одновременно, либо только одну вещественную часть комплексного числа. В последнем случае мнимая часть инициализируется нулевым значением.

Примеры:

complex zl();

// х=0 , у=0

complex

z2(5.0);

// х«=5.0,

у«=0

complex

z3(5.0,-1.0); // х=*5.0,

у««-1.0

Таблица176.1

Компонентные и дружественные функции класса complex

Функция Прототипикраткоеописаниедействий

abs

double abs (complex x) ;

 

Возвращает модуль комплексного числа z

acos

complex acos(complex z);

 

Возвращает значение арккосинуса комплексного числа z

arg

double arg(complex z);

 

Возвращает главное значение аргумента комплексного числа z

 

(-л<argz^я)

asm

complex asin(complex z);

 

Возвращает значение арксинуса комплексного числа z

atan

complexatan(complexx ) ;

 

Возвращает значение арктангенса комплексного числа z

530

Язык Си++

 

ТаблицаП6.1(продолжение)

Функция

Прототип икраткое описание действий

СОП)

double conj(complex z ) ;

 

Возвращает комплексносопряженное к комплексному числу z

COS

complex cos(complex z ) ;

 

Возвращает значение косинуса комплексного числа z

cosh

complex cosh(complex z ) ;

 

Возвращает значение гиперболического косинуса комплексного

 

числа z

exp

complex exp(complex z ) ;

 

Возвращает значение функции еж комплексного числа z

imag

double imag(complex z ) ;

 

Возвращает мнимую часть комплексного числа z

log

complex log(complex z);

Возвращает значение натурального логарифма комплексного

 

 

числа z

loglO

complex loglO(complex z) ;

Возвращает значение десятичного логарифма комплексного чис

 

 

ла z

norm

double norm(complex z) ;

Возвращает квадрат модуля комплексного числа z

 

pow

complex pow(complex x, complex y);

 

Возвращает значение ху комплексных чисел х и у

polar

complex polar(double mag, double angle);

 

Возвращает комплексное число, имеющее модуль mag и значение

 

аргумента angle

real

double real(complex z);

 

Возвращает вещественную часть комплексного числа z

sin

complex sin(complex z);

 

Возвращает значение синуса комплексного числа z

sinh

complex sinh(complex z);

 

Возвращает значение гиперболического синуса комплексного

 

числа z

Приложение 6. Библиотечные классы и их компонентные функции

5 3 1

 

 

ТаблицаПб.1(продолжение)

Функция

Прототип икраткоеописаниедействий

 

sqrt

complex sqrt(complex z);

 

 

 

Возвращает одно из значений квадратного корня из комплексно-

 

го

( argz

argz

 

 

го числа z по формуле: Vz = I z I • cos——+ i•sin——

 

tan

complex tan(complex z);

 

 

 

Возвращает значение тангенса комплексного числа z

 

tanh

complex tanh(complex

z ) ;

 

 

Возвращает значение гиперболического тангенса комплексного числа z

Другой полезный класс - string - описывается в заголовочном файле cstring.h. В компиляторе ВС++ 4.5 этот класс содержит 11 форм конструкторов объектов (см. [30]):

string () ;

Конструктор по умолчанию. Создает строку нулевой длины, string(const strings s);

Создает строку, совпадающую с полученной по ссылке з. string(const strings s, size_t start, size_t n « NPOS);

Создает строку, содержащую п байт, начиная с позиции start исходной строки з. Тип size_t определен в заголовочном файле так: typedef unsigned size_t; знг .ение NPOS определено как unsigned (-1), т.е. 32767.

string(const char *ср);

Копирует строку, адресуемую указателем ср (до первого нулевого символа).

string(const char *ср, size_t start, size_t n = NPOS);

Создает строку, содержащую п байт, начиная с позиции start исходной строки ср.

s t r i n g ( [ u n ] s i g n e d char с ) ;

Создает строку, состоящую из одного символа с. string([un]signed char c, size_t n = NPOS);

Создает строку, состоящую из п символов с. string(const TSubString _FAR £ss);

Создает строку из подстроки ss. string(HINSTANCE instance, UINT id, int len = 255);

Создает строку в программах для Windows из ресурса.

34*

532

Язык Си++

Класс string замечателен тем, что в нем реализована технология, называемая "копировать при записи" ("copy-on-write"). Это означает, что при создании новых объектов класса string копируется не сама порождающая строка, а лишь указатель на нее. При дальнейших чтениях информации из этого объекта на самом деле выполняются операции не с новой, а с порождающей строкой. Реальное же выделение памяти для объекта и копирование содержимого исходной строки происходит только в том случае, если в строку нового объекта вносятся изменения.

Таблица П6.2

Компонентные и дружественные функции класса string

Функция

 

 

Прототипикраткоеописаниедействий

ansi_to_

void ansi_to_oem() ;

 

 

 

 

oem

Конвертирует строку из кодировки ANSI (Windows) в кодировку

 

OEM (MS-DOS) (доступна только при компиляции программ для

 

Windows, в т.ч. в режиме EasyWin)

 

 

append

strings

append(const

strings

s);

 

strings

append(const

strings

s,

size_t start,

 

size_t n • NPOS);

 

 

 

 

 

strings append(const char *cp, size_t start,

 

size_t n = NPOS);

 

 

 

 

 

Добавляет к исходной строке соответственно строку s или не

 

более п символов (начиная с символа start) строки в (ср)

 

Все три формы возвращают ссылку на результат

assign

strings

assign(const

strings

a) ;

strings

assign(const

strings

s,

size_t s t a r t ,

 

 

size_t n - NPOS);

 

 

 

 

 

Меняет содержимое исходной строки на соответственно строку s

 

или п символов (начиная с символа start) из строки з

compare

int compare(const strings s)

 

 

int compare(const strings s, size_t orig, size_t

 

n » NPOS)

 

 

 

 

 

Сравнивает исходную строку соответственно со строкой s или п

 

символами строки s. Возвращает целое число, меньшее, большее

 

или равное нулю в зависимости от результата сравнения строк

contains

in t

contains(const

char *pat)

const;

 

in t

contains(const

strings s)

 

const;

Возвращает 1, если подстрока pat (s) найдена в исходной строке в противном случае возвращает О

Приложение 6. Библиотечные классы и их компонентные функции

533

1

 

Таблиц П6.2 (продолжение)

 

Функция

Прототипикраткоеописаниедействий

 

 

сору

size_t copy(char *cb, size_t n « NPOS);

 

 

 

size_t copy(char *cb, size_t n, size_t pos);

 

 

Копирует не более n символов (начиная с pos) исходной строки в строку сЬ. Возвращает число скопированных символов string сору() const throw(xalloc);

Возвращает копию исходной строки

с str const char *c_str() const;

Возвращает указатель (адрес) на исходную строку (или ее копию)

find size_t find(const strings s);

size_t find(const strings s, size_t pos); Возвращает позицию первого вхождения подстроки s в исходную строку (начиная с позиции pos исходной строки) size_t find(const TRegexpS pat, size_t i = 0); size_t find(const TRegexpS pat, size_t *ext, size_t i « 0) const;

Возвращает позицию первого вхождения регулярного выражения pat в исходную строку

Если подстрока не найдена - возвращается NPOS

'nd_first size_t find_first_of(const strings s) const; гГ size_t find__first_of (const strings s, size_t

pos) const;

Возвращает первую позицию исходной строки (начиная с позиции роз), в которой встретился некоторый символ строки s. В случае неуспеха возвращается NPOS

find_first_ size_t find_first_not_of(const strings s) const; not of size_t find_first_not__of (const strings s, size_t

pos) const;

Возвращает первую позицию исходной строки (начиная с позиции pos), содержащую символ, отсутствующий в строке з. В случае неуспеха возвращается NPOS

find_last size_t find_last_of(const strings s) const;

of size_t find_last_of(const strings s, size_t pos) const;

Аналогична find_first_of, но возвращается последняя позиция

534

Функция find_last_not_of

get_at

get_case_sensitive_flag

get_initial_capacity

Язык Си++

Таблица П6.2 (продолжение)

Прототип и краткое описание действий

size_t find_last_not_of(const strings s) const;

size_t find_last_not_of(const strings s, size_t pos) const;

Аналогичнаfind_first_not_of,но возвращается последняя позиция

char get_at (size__t pos) const throw(outofrange);

Возвращает символ исходной строки в позиции pos. Если pos > length () -1, порождается исключение outofrange

static int get_case_sensitive__flag() ; Возвращает I, если при сравнении строк различаются прописные и строчные буквы, 0 - если нет

stati c unsigned get_initial_capacity(); Возвращает количество байт памяти, отведенных под исходную строку (< length () -1)

get_max_waste

get_paranoid_check

get_resize_increment

get_skipwhitespace_flag

hash

initial_capacity

static unsigned get_max_waste(); Возвращает максимальное число байт, которое может быть выделено для строки

stati c int get_paranoid_checJc () ; Возвращает 1, если возможна проверка коллизий хеширования; иначе возвращает 0.

static unsigned get_resize_increment(); Возвращает приращение, изменяющее размер строки.

stati c int get_skipwhitespace_flag(); Возвращает 1, если игнорируются обощенные пробельные символы; иначе возвращает 0.

unsigned hash() const; Возвращает значение хеширования

static size_t initial_capacity(size_t ic • 63);

Устанавливает минимальное количество байт, выделяемых для строки по умолчанию

Приложение 6. Библиотечные классы и их компонентные функции

535

 

 

 

Таблица П6.2 (продолжение)

Функция

 

Прототип и краткое описание действий

 

insert

stringfi

insert(size_t

pos, const strings s) ;

 

 

strings

insert(size_t

pos, const strings s,

 

 

size__t start, size_t

n » NPOS) ;

 

 

С позиции pos в исходную строку вставляется содержимое

 

 

строки s (не более п символов строки в, начиная с позиции

 

start). Возвращает ссылку на результат

 

is_nuU

int is_null() const;

 

 

 

Возвращается 1, если исходная строка пуста, и 0 - в про-

 

 

тивном случае

 

 

length

unsigned

length() const;

 

 

Возвращает число символов в исходной строке

 

MaxWaste

static size_t MaxWaste(size_t mw = 63);

 

 

Установить максимальное число байт, выделяемых для стро-

 

ки

 

 

 

oem_to_ansi

prepend

void oem_to_ansi () ;

Конвертирует строку из кодировки OEM (MS-DOS) в кодировку ANSI (Windows) (доступна только при компиляции программ для Windows, в т.ч. в режиме EasyWin)

strings prepend(const strings s ) ;

strings prepend(const strings s, size_t start,• size_t n = NPOS);

strings prepend(const char *cp );

strings prepend(const char *cp, size_t start, size_t n » NPOS);

Вставляет в начало исходной строки строку s (cp) (п символов строки s (ср). начиная с позиции start)

put at

void put_at(size_t pos, char

с)

 

throw(outofrange);

 

 

Заменяет символ в позиции pos исходной строки символом с.

 

Если pos > length () -1, порождается исключение

 

outofrange

 

eadjile

istreams read_file(istreanS

i s ) ;

 

"читать строку из входного потока is (до символа EOF или

 

NULL)

 

ead line

streams read_line(istreamS

i s ) ;

 

'читать строку из входного потока is (до символа перевода

 

строки или EOF)