Главная страница
Навигация по странице:

  • 11.11.1 Представление в памяти

  • 11.11.2 Конструкторы

  • 11.11.3 Ввод cin>>s1; //до разделителя и \n и \n не читает getline(cin, s1); //читает всю строку 11.11.4 Вывод cout<

  • //конструкоры string s1; string s2("Что");; string s3("Где",4); string s4(s2); cout<

  • 11.11.6 Методы 1.

  • 11.11.7 Функции преобразования из строки в числовой формат Функции преобразования: atoi, atol, atof

  • 11.11.8 Преобразование числа в строку

  • 12 Механизм исключений Исключение — это событие при выполнении программы, которое приводит к её ненормальному или неправильному поведению. Существует два вида исключений: 1.

  • Общий механизм обработки исключений

  • Формат механизма перехвата и обработки исключений 1.Контролируемый блок try

  • ООП. Пособие по ООП в С++. Создание сложных программных систем Объектно ориентированная технология


    Скачать 2.1 Mb.
    НазваниеСоздание сложных программных систем Объектно ориентированная технология
    Дата21.02.2022
    Размер2.1 Mb.
    Формат файлаpdf
    Имя файлаПособие по ООП в С++.pdf
    ТипАнализ
    #369034
    страница10 из 15
    1   ...   7   8   9   10   11   12   13   14   15
    Класс string
    В Си для представления строк используется строка, завершающаяся нулем. Эта строка используется и в С++. В С++ применяется еще и класс string.Этот тип строк - это объект шаблонного класса basic_string.
    Строка string из это производный тип от basic_string, а wstring
    – широкая строка (Unicode). Инкапсулирует последовательность символов.
    Строка является динамической, растет по мере добавления символов.
    11.11.1
    Представление в памяти
    Количество символов, которые будет содержать строка, не является предопределенным. Объект класса string будет расти по мере необходимости, чтобы вместить строку, которую эта переменная должна хранить. При создании строковой переменной ей выделяется первоначальный объем памяти, чтобы сохранить значение строки. Используя метод capacity() можно определить размер необходимой памяти. При выполнении операций добавления, если в переменной недостаточно места, размер автоматически увеличивается на 16 байт при каждом расширении.
    11.11.2
    Конструкторы
    string s1; string s2(const char *);записывает в строку знач.параметра – строка,завершающаяся нулем string s3(const char *,int n); записывает в строку n смволов из знач.параметра
    string s4(string
    &); записывает в строку знач.параметра – строка string
    11.11.3
    Ввод
    cin>>s1;
    //до разделителя и \n и \n не читает getline(cin, s1);
    //читает всю строку
    11.11.4
    Вывод
    cout<11.11.5
    Перегруженные операции. К string строке можно применять
    операции
    =
    Присваивание s1=’x’; символа s2=”asdfg”; строки s3=”1234567”; s4=s3; другой строки
    +
    Конкатенация – сцепление срок в нужной последовательности s4=s3+s4+s1; //в s4 текст 12341234asdfg
    +=
    Добавление в конец строки дугой строки s2+=s1;
    Операции сравнения
    ==
    Равенство(две строки равны, если их длины равны и они посимвольно равны) s1=”abc”; s2=”abc”; bool t=s1==s2;
    !=
    Не равно s2=”bca”; bool t=s1!=s2;
    <
    Меньше (s1"acb"
    ; s2=
    "bc"
    ;
    bool t=s1//t=true s1=
    "aac"
    ; s2=
    "abc"
    ; t=s1//t=true
    <=
    Меньше или равно
    >
    Больше (s1>s2: в строке s1 встретился символ, с кодом большим, чем у соответствующего символа строки s2) s1=
    "bcb"
    ; s2=
    "ac"
    ; bool t=s1>s2;
    //t=true s1=
    "abd"
    ; s2=
    "abc"
    ; t=s1>s2;
    //t=true
    >=
    Больше или равно
    Индексация
    []
    Индексация – доступ к элементу по инднксу for
    (
    int i=0;iОперации ввода и вывода
    <<
    Вывод cout<>> ввод cin>>s2;
    Пример применения операций и методов
    #include
    "stdafx.h"
    #include

    #include
    using namespace std; int
    _tmain(
    int argc, _TCHAR* argv[])
    { string s1; string s2(
    "ABC"
    );; string s3(
    "ABCDERTY"
    ,4); string s4(s2); cout<
    cout<"GFFF"
    ; s1=
    'x'
    ; s2=
    "asdfg"
    ;
    //s3="1234567"; s4=s3; cout<>s1;
    //до пробела не читает \n cin.get();
    //читает \n getline(cin,s2);
    //всю строку cout< 0;
    } int
    _tmain(
    int argc, _TCHAR* argv[])
    {
    //конструкоры
    string s1; string s2(
    "Что?"
    );; string s3(
    "Где?"
    ,4); string s4(s2); cout<//присваивание
    s1=
    "GFFF"
    ; s1=
    'x'
    ; s2=
    "asdfg"
    ; s4=s3; cout<//Ввод и вывод
    cout<<
    "Введите слово"
    <>s1; cout<
    char ch=cin.get();
    //закоментируйте и запустите. что получится? Почему? cout<<
    "Введите текст из нескольких слов через побел"
    <"Введите слово"
    <>s1;
    }
    11.11.6
    Методы
    1.
    Получить информацию об объекте string size_type size() const length()
    Количество символов в строке size() реализована для всех контейнеров length() – для строки size_type capacity() const
    Текущую емкость строки void reserve(size_type num=0)
    Устанавливает конкретную емкость
    (num). size_type max_size()const
    Максимально допустимый размер памяти под строку bool empty() const true – строка пуста const char * data()
    Формирует массив из символов вызывающей строки
    1. Максимальный объем строки string. size_type – ‘это тип для методов, представляет форму беззнакового целого, которая может быть автоматически конвертирована в целый тип.
    /
    /Сколько памяти выделяется пустой сроке s1=
    "123456"
    ; s1.erase();
    //делает стоку пустой cout<//Сколько памяти выделяется не пустой сроке с таким содержанием s1=
    "123456"
    ; cout<

    //Сколько памяти выделяется не пустой сроке с таким содержанием s1=
    "123456789012345"; cout<//формирование массива const char
    *
    array
    = s1.data(); for
    (
    unsigned int i=0;iarray
    [i]; size_type max_size() const; string S; int i=S.max_size();
    //i=-2 cout<//4294967294 2. Текущая длина строки string – количество символов в строке. Два метода: size_type size() const; //поддерживают все контейнера STL size_type length() const; string S(
    "123456"
    ); int i=S.max_size(); cout<" "
    <//6 -2 3. Определение текущей емкости строки string. Емкость строки – это начальный объем строки и ее увеличение на 16 байт при расширении строки. size_type capacity() const; string S(
    "123456"
    ); int i=S.capacity(); cout<<
    "Начальная емкость="
    <"\n"
    ; //=15
    S+=
    "678567"
    ; cout<<
    "Текущая емкость="
    <"\n"
    ;//=15
    S+=
    "67856"
    ; cout<<
    "Текущая емкость="
    <"\n"
    ;//=31 4. Установить емкость строки заданного значения. Исключение перераспределения памяти. Если строка в переменной больше чем
    устанавливаемая емкость, то емкость уменьшается до указанного размера. string S; int i=S.capacity(); cout<<
    "Начальная емкость="
    <" "
    <"\n"
    ;//=15
    S.reserve(20); cout<<
    "Текущая емкость="
    <" "
    <"\n"
    ;//=31
    S.reserve(128); cout<<
    "Текущая емкость="
    <" "
    <"\n"
    ;//=143 5. Копирование части строки string substr(size_type indx=0, size_type len=npos);
    Копирует подстроку длиной len, начиная с символа в позиции indx. string S=
    "AAADDDDDCCCCCC"
    ; string SS=S.substr(3,5); cout<<
    "Результат"
    <"\n"
    ;
    //DDDDD
    6. Доступ к элементу строки. Два варианта:
    Перегруженная операция []
    Метод at – возвращает символ в позиции indx char &at(size_type indx) string S=
    "AAADDDDDCCCCCC"
    ; for
    (
    int i=0; i"\n"
    ; for
    (
    int i=0; i7. Содержит ли строка значение bool empty();
    Возвращает true ли строка пуста и false иначе. string S=
    "AAADDDDDCCCCCC"
    ; cout<8. Сравнение строк. Помимо операций сравнение строк можно выполнять, используя метод: int compare(size_type indx, size_type len, const string &str) const;
    Сравнивает частью вызывающей строки (подстроку) со строкой str. Если подстрока меньше str, то результат <0.
    Если подстрока больше str, то результат >0.
    Если подстрока равна str, то результат =0.
    9. Преобразование строки в массив символов char* c_str() const; string S=
    "AAADDDDDCCCCCC"
    ;
    const char
    *mas=S.c_str(); cout<2.
    Модификация строки string append (string sub)
    Добавляет строку в конец вызывающей строки string assign(string s)
    Присваивает новую строку s вызывающей string cleare()
    Удаляет текст из строки (для строки) string copy(char *s, int len, int indx) копирует подстроку, из вызывающей строки, заданную диапазоном [pos, indx + len), в строку символов s, indx не должен быть >= size(). string erase(string s, int indx, int len)
    Удаляет часть сроки, начиная с indx длиной len string erase()
    Удаляет текст из строки (для контейнеров) string insert(int indx, const string
    &sub)
    Вставляет в позицию indx вызывающей строки подстроку sub или символ string push_back(char ch)
    Добавляет символ ch в конец вызывающей строки char &at(size_type indx)
    Аналог [] s1=
    "Что?"
    ; s2=
    "Где?"
    ; s1.append(s2); cout<//Что?Где? s3.assign(s1); cout<//Что?Где? s3.clear();
    //очищает строку if
    (s3.empty()) cout<<
    "Строка s3 пуста"
    <"Когда?"
    ; s1.copy(str,3,0); str[3]=
    '\0'
    ;
    //завершение символьной строки
    cout<// s1.insert(8,
    "Когда"
    ); cout<// s1.push_back(
    '?'
    ); cout<cout<3.
    Операции замены части строки другой string &replace(size_type indx, size_type len, string &s1)
    Заменяет часть вызвавшей строки от indx длиной len на строку s1 string& swap(string &s1)
    Вызывающая строка и s1 обмениваются значениями string &replace(size_type indx, size_type len, char *str)
    Заменяет часть вызвавшей строки на строку str – в фомате Си string substr(size_type indx=0, size_type len=npos)
    Копирует из вызывающей строки часть от indx длиной len string &replace(size_type indx, size_type len, string &s1, size_type indx1, size_type len1)
    Заменяет часть вызывающей строки с indx длиной len частью строки s1 с индекса indx1 длиной len1 s1=
    "Что?Где?Когда?"
    ; s1.replace(4,4,
    "888888"
    );
    //Что?888888Когда? cout<"23332"
    ; s3=
    "111111111"
    ; s2.swap(s3); s2.replace(2,3,s3,1,3); cout<//113331111
    4.
    Операции поиска size_type find(const char *str, size_type indx=0)const
    Поиск первого вхождения подстроки (формат Си) str в части вызывающей строки, начиная с индекса indx. Результат индекс в вызывающей строке, еси подстрока найдена и -1 если нет.
    size_type find(const string &str, size_type indx=0)const
    Поиск первого вхождения подстроки (формат С++) str в части вызывающей строки, начиная с индекса indx size_type rfind(const char *str, size_type indx=0)const
    Поиск последнего вхождения подстроки (фомрат Си) str в части вызывающей строки, начиная с индекса indx. Результат – индекс в вызывающей строке. size_type find(const string &str, size_type indx=0)const
    Поиск последнего вхождения подстроки (формат С++) str в части вызывающей строки, начиная с индекса indx size_type find_first_of(const char
    *str, size_type indx=0)const
    Поиск в вызывающей строке
    (начиная с указанного индекса indx) первого вхождения символа, совпавшего с любым символом строки str. Результат – индекс символа в вызывающей строке. size_type find_first _of (const string
    &str, size_type indx=0)const
    Поиск в вызывающей строке первого символа, совпавшего с любым символом строки str.
    Результат – индекс символа в вызывающей строке. size_type find_first_not_of(const char *str, size_type indx=0)const
    Поиск в вызывающей строке
    (начиная с указанного индекса indx) первого вхождения символа, не входящего в строку str. Результат – индекс символа в вызывающей строке. size_type find_first_not_of(const string &str, size_type indx=0)const
    Поиск в вызывающей строке
    (начиная с указанного индекса indx) первого символа, не входящего в строку str. Результат

    – индекс символа в вызывающей строке. size_type find_last_of(const char
    *str, size_type indx=0)const
    Поиск в вызывающей строке
    (начиная с указанного индекса indx) последнего вхождения символа, совпавшего с любым символом строки str. Результат – индекс символа в вызывающей строке. size_type find_last_of(const string
    &str, size_type indx=0)const
    Поиск в вызывающей строке
    (начиная с указанного индекса indx) последнего вхождения символа, совпавшего с любым символом строки str. Результат – индекс символа в вызывающей строке. size_type find(const char, size_type indx=0)const
    Поиск заданного ch символа в стоке после индекса indx size_type find(const char *str, size_type indx, size_type len )const
    Поиск в вызывающей строке
    (начиная с указанного индекса indx) первых len символов строки str s1=
    "2211133611144111"
    ; int k=0,i=0;
    //Количество вхождений подстроки 111 в s1 while
    ((i=s1.find(
    "111"
    ,i))&&i!=-1)
    { i+=3; k++;
    }
    //входит ли один из символов строки s3 в строку s2, результат индекс первого вхождения s2=
    "342"
    ; i=s1.find_first_of(s2);
    //=0 s2=
    "3421"
    ; i=s1.find_first_not_of(s2);
    //=7

    11.11.7
    Функции преобразования из строки в числовой формат
    Функции преобразования: atoi, atol, atof
    Строковое представление числа в числовой формат. Выполниться верно, если строковое представление числа записано по правилам представления числа. Если число начинается с цифр и в числе есть символы, отличные от цифр и знака, то выдаст неверный результат, число до символа, не допустимого в числе. s1="111"; const char *ps1=s1.c_str(); int ii=atoi(ps1);
    Функции преобразования: strtod, strtol
    double strtod(const char *s, char **ch);
    Преобразует число из s в формат вещественного, формирует код завершения и записывает результат преобразования в ch – текст – первый символ, который не допустим в записи числа.
    Пример корректного и некорректного преобразования и применение при проверке ввода числовых данных.
    // convert_chislo.cpp: определяет точку входа для консольного приложения.
    #include
    "stdafx.h"
    #include
    "string.h"
    #include
    "iostream" usingnamespace std; int
    _tmain(
    int argc, _TCHAR* argv[])
    { char
    *ss,ps1=”123”; double y=strtod(ps1,&ss); if
    (!(strcmp(ss,
    ""
    )))
    //если выполнено преобразование, т.е.*ss пусто
    { cout<<
    "y="
    <}
    else
    { cout<<
    "ss="
    <' '
    <<
    "y="
    <} cout<<
    '\n'
    ; ps1=
    "12a4"
    ; y=strtod(ps1,&ss); if
    (!(strcmp(ps1,
    ""
    )))
    { cout<<
    "y="
    <} else
    //если не выполнено преобразование, т.е.*ss не пусто
    { cout<<
    "ss="
    <' '
    <<
    "y="
    <}

    }
    11.11.8
    Преобразование числа в строку
    #include

    #include
    using namespace std; int main(){ int num=123; std::stringstream ss; ss< 0;
    }
    12 Механизм исключений
    Исключение — это событие при выполнении программы, которое приводит к её ненормальному или неправильному поведению. Существует два вида исключений:
    1.
    Аппаратные
    (структурные,
    SE-StructuredException), которые генерируются процессором. К ним относятся, например,
    • деление на 0;
    • выход за границы массива;
    • обращение к невыделенной памяти;
    • переполнение разрядной сетки.
    2.
    Программные, генерируемые операционной системой и прикладными программами – возникают тогда, когда программа их явно инициирует.
    Когда встречается аномальная ситуация, та часть программы, которая ее обнаружила, может сгенерировать, или возбудить, исключение.
    Исключение это возникновение непредвиденного или аварийного события, завершающего выполнение программы с системным сообщением об ошибке: деление на нуль, обращение по несуществующему адресу и т.д.
    С++ предоставляет программисту возможность восстановить программу и продолжить ее выполнение.
    Механизм исключений предназначен только для событий, которые происходят в результате работы самой программы и указываются явным образом.
    Исключения возникают, когда некоторая часть программы не смогла сделать то, что от нее требовалось.

    Исключения позволяют логически разделить вычислительный процесс на две части – обнаружение аварийной ситуации и обработка.
    Достоинства использования исключений:
    • улучшение структуризации программы;
    • при возникновении прерывания в функции, не надо возвращать сообщение об ошибке или выводить его в функции, а можно передать его средствами механизма исключений во внешнюю среду.
    • обработка исключений, возникающих в методах классов, в частности в конструкторе.
    Прежде чем создать исключение надо подумать и определить, какие исключения могут возникнуть в приложении.
    12.1
    Общий механизм обработки исключений
    1.
    Оператор, в котором может произойти ошибка входит в контролируемый блок – составной оператор, начинающийся ключевым словом try.
    2.
    Функция, в которой она возникла, генерирует исключение, используя ключевое слово throw c параметром, определяющим вид исключения.
    Параметром может быть константа, переменная или объект, который используется для передачи информации об исключении его обработчику.
    3.
    Отыскивается соответствующий обработчик (catch …) исключения и ему передается управление.
    4.
    Если обработчик исключения не найден, вызывается стандартная функция terminate, которая вызывает функцию abort, аварийно завершающая текущий процесс. Можно определить собственную функцию завершения процесса.
    5.
    После того, как исключение было зафиксировано, исполнение кода не может быть продолжено с точки генерации исключения.
    12.2
    Формат механизма перехвата и обработки исключений
    1.Контролируемый блок
    try {
    блок операторов, в которых актуально появление исключений
    функции, вызванные из этого блока и вызванные из первых
    функций, так же считаются ему принадлежащими
    }
    Когда возбуждается исключение, пропускаются все инструкции, следующие за той, где оно было возбуждено. Исполнение программы
    возобновляется в catch-обработчике этого исключения. Если такого обработчика не существует, то управление передается в функцию terminate(), определенную в стандартной библиотеке C++.
    1   ...   7   8   9   10   11   12   13   14   15


    написать администратору сайта