Главная » C++, C++ Builder » Классы STL: с самого начала

0

Перед тем, как начать писать приложения с использованием STL, давайте исследуем классы, имеющиеся в этой библиотеке, а также то, как вы можете их использовать в своих приложениях. Мы будем брать по одному классу и рассматривать методы, доступные для этого класса, и применения класса (равно как и неприменения).

Сначала давайте посмотрим на класс string (строка), который предоставляет методы для обработки символов. Этот класс — умный и гибкий массив символов. Вместо того, чтобы ограничивать вас фиксированным количеством символов, этот класс предоставляет возможность поддержки строк любой длины (вплоть до максимально возможного блока памяти, поддерживаемого операционной системой, с которой вы работаете). Класс string похож на тип string из Visual Basic и предоставляет похожую функциональность для  манипулирования  символьными  данными,  хранящимися  в строке.

Таблица 5.1  показывает список основных (наиболее часто  используемых)  функций класса  string

вместе с описанием того, что делает функция. Таблица 5.1 Используемые методы класса string operator[]

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

c_str()

Конвертирует строку в char* (указатель на символ) для использования в функциях, не умеющих работать со string

append

Добавляет символы к концу строки

operator=

Присваивание строке других строк, символьных массивов и даже чисел

insert

Позволяет вставлять символы или другие строки в переменную типа string

erase

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

replace

Замещение одного или более символов в данной позиции

length(или size)

Возвращает количество символов в строке

empty

Указывает, есть ли в строке символы

find

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

rfind

Как find, но поиск идет с конца строки назад

find_first_of

Позволяет найти первое вхождение символов из набора в строке

substr

Возвращает подстроку. Очень похоже на функцию Visual Basic substr

find_first_not_of

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

compare

Позволяет сравнивать строки (также поддерживаются операторы !=, <, >)

Класс string — один из самых нужных большинству приложений. Он убирает весь этот путаный код, который мы когда-либо писали для доступа к строкам символов и управления ими, а также снимает проблему превышения длины строки и возможного стирания содержимого памяти за ее пределами.

Давайте  посмотрим  на  очень  простой  пример использования класса string:

#include <string>

#include <stdio.h>

#include <stdlib.h>

#include <string> using namespace std;

int main(void)

{

// Присвоить строку символов объекту типа string string s = "Hello world";

// Получить первое слово в строке

int nWordEnd = s.find(‘ ‘);

string sub_string = s.substr(0,nWordEnd);

// Вывести результаты

printf("Исходная строка: %s\n", s.c_str); printf("Подстрока из первого слова: %s\n",

sub_string.c_str());

return 0;

}

Этот пример несколько важных случаев использования объекта string. Во-первых, вы видите, что мы можете прямо присваивать строку символов объекту string. Это упрощает использование строк с данными в нашем приложении.

Следующее — использование метода find в объекте типа string. Метод find (и его брат, метод rfind) найдет первое вхождение символа в строке. Возвращает метод позицию (начиная с 0) найденного символа, или —1, если подходящего символа в строке не нашлось.

Метод substr возвращает копию части строки, начинающейся с позиции, заданной первым параметром метода, и длиной, заданной во втором параметре метода. Если опустить второй аргумент, то возвратится строка символов начиная с данной позиции до конца исходной строки, что эквивалентно функции языка BASIC Right$().

И, наконец, для вывода строки на экран мы используем нашу старую знакомую — функцию printf, выводя строку как символьный массив (спецификация %s в строке формата printf) через использование метода c_str() для преобразования объекта string в символьный массив. Я предпочитаю использовать printf в приложениях консольного типа (например DOS-приложениях). Если вы предпочитаете использовать более современные потоки, таки как cout, то вы можете переписать предыдущие строки так:

cout << "Исходная строка: " << s << endl; cout << "Подстрока из первого слова: "

<< sub_string << endl;

Заметьте, что в этом случае вам не нужно использовать метод c_str, так как у класса string есть переопределенные методы для потоковых операторов << и >>.

Источник: Теллес М. – Borland C++ Builder. Библиотека программиста – 1998

По теме:

  • Комментарии