МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • Лекции по C++

    Прототип функции strnicmp :

    int strnicmp(const char *strl, const char *str2, size_t num);

    Функция сравнивает первые num символов строк strl и str2, не делая

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

    целую величину:

    < 0 когда strl меньше, чем str2;

    = 0 когда strl равна str2;

    > 0 когда strl больше, чем str2.

    Пример

    char string1[] = "Borland C++";

    char string2[] = "BORLAND Pascal";

    i = strnicmp(string1, string2, 7);

    В последнем операторе переменной i присваивается значение 0, так как

    подстрока "Borland" отличается в этих строках только регистром.

    Рассмотрим пример программы, в которой применяются функции сравнения строк.

    Программа из листинга 5 объявляет массив строк и присваивает им значения.

    Затем программа выводит исходный массив, сортирует его и выводит значения

    строк отсортированного массива. |

    (см. List7_5.cpp - Исходный текст программы STRING2.CPP)

    Преобразование строк

    Функция strlwr

    Прототип функции strlwr:

    char* strlwr (char *source)

    Функция преобразует символы верхнего регистра в символы нижнего регистра в

    строке source. Другие символы не затрагиваются. Функция возвращает

    указатель на строку source.

    Пример

    char str[] = "HELLO THERE";

    strlwr(str);

    Переменная str теперь содержит строку "hello there".

    Функция strupr

    Прототип функции strupr:

    char* strupr(char *source)

    Функция преобразует символы нижнего регистра в символы верхнего регистра в

    строке source. Другие символы не затрагиваются. Функция возвращает

    указатель на строку source.

    Пример

    char str[] = "Borland C++";

    strupr(str);

    Переменная str теперь содержит строку "BORLAND С ++".

    Обращение строк

    Библиотека STRING.H предлагает функцию strrev для записи символов в строке

    в обратном порядке.

    Функция strrev

    Прототип функции strrev:

    char* strrev(char *str)

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

    строку str. char str[] = "Hello";

    strrev(str) ;

    cout « str;

    Будет выведено "olleH".

    Рассмотрим программу, которая манипулирует символами в строке.

    List7_6.cpp показывает исходный текст программы STRING3.CPP. Программа

    выполняет следующие задачи:

    . Запрашивает у вас ввод строки

    . Отображает ваш ввод

    . Выводит вашу строку в нижнем регистре

    . Выводит вашу строку в верхнем регистре

    . Отображает символы, которые вы ввели, в обратном порядке

    . Выводит сообщение, что ваш ввод не содержит символов верхнего регистра,

    если это так

    . Выводит сообщение, что ваш ввод не содержит символов в нижнем регистре,

    если это так

    . Выводит сообщение, что ваша строка симметрична, если это так

    Поиск символов

    Библиотека STRING.H предлагает ряд функций для поиска символов в строках.

    Это функции strchr, strrchr, strspn, strcspn и strpbrk. Они осуществляют

    поиск в строках символов и простых символьных шаблонов.

    Функция strchr

    Функция strchr определяет первое вхождение символа в строку.

    Прототип функции strchr:

    char* strchr(const char *target, int c)

    Функция находит первое вхождение символа с в строку target. Функция

    возвращает указатель на символ в строке target, который соответствует

    заданному образцу с. Если символ с в строке не обнаруживается, функция

    возвращает 0.

    Пример

    char str[81] = "Borland C++";

    char *strPtr;

    strPtr = strchr(str, '+');

    Указатель strPtr теперь содержит адрес подстроки "++" в строке str.

    Функция strrchr

    Функция strrchr определяет последнее вхождение символа в строке.

    Прототип функции strrchr:

    char* strrchr(const char *target, int c)

    Функция находит последнее вхождение символа с в строку target. Функция

    возвращает указатель на символ в строке target, который соответствует

    заданному образцу с. Если символ с в строке не обнаруживается, функция

    возвращает 0.

    Пример

    char str[81] = "Borland C++ is here";

    char* strPtr;

    strPtr = strrchr(str, '+');

    Указатель strPtr теперь указывает на подстроку "+ is here " в строке str.

    Функция Strspn

    Функция strspn возвращает число символов с начала строки, совпадающих с

    любым символом из шаблона.

    Прототип для функции strspn:

    size_t strspn(const char *target, const char *pattern)

    Функция strspn возвращает число символов от начала строки target,

    совпадающих с любым символом из шаблона pattern.

    Пример

    char str[] = "Borland C++ 5";

    char substr[] = "narlBod";

    int index;

    index = strspn(str, substr);

    Этот оператор присваивает 8 переменной index, потому что первые восемь

    символов из str содержатся в подстроке substr.

    Функция strcspn

    Функция strcspn просматривает строку и выдает число первых символов в

    строке, которые не содержатся в шаблоне.

    Прототип функции strcspn:

    size_t strcspn(const char* str1, const char* str2)

    Функция strcspn просматривает строку str1 и выдает длину подстроки,

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

    строке str2.

    Пример

    char strng[] = "The rain in Spain";

    int i = strcspn(strng, " in");

    Этот пример возвращает 3 (расположение первого пробела в строке strng)

    переменной i.

    Функция strpbrk

    Функция strpbrk просматривает строку и определяет первое вхождение любого

    символа из образца.

    Прототип функции strpbrk:

    char* strpbrk(const char* target, const char* pattern)

    Функция strpbrk ищет в строке target первое вхождение любого символа из

    образца pattern. Если символы из образца не содержатся в строке, функция

    возвращает 0.

    Пример

    char *str = "Hello there how are you";

    char *substr = "hr";

    char *ptr;

    ptr = strpbrk(str, substr);

    cout « ptr « endl;

    Вы увидите на экране строку "here how are you", потому что 'h' встречается

    в строке str раньше, чем 'r'.

    Поиск строк

    Библиотека функций STRING.H предлагает для поиска подстроки в строке

    функцию strstr.

    Функция strstr

    Прототип функции strstr:

    char* strstr(const char *str, const char *substr);

    Функция ищет в строке str первое вхождение подстроки substr. Функция

    возвращает указатель на первый символ найденной в строке str подстроки

    substr. Если строка substr не обнаружена в строке str, функция возвращает

    0.

    Пример

    char str[] = "Hello there! how are you";

    char substr[] = "how";

    char *ptr;

    ptr = strstr (str, substr);

    cout « ptr « endl ;

    Это приведет к выводу строки "how are you", поскольку в строке str ,

    была обнаружена подстрока "how". Указатель ptr содержит адрес остатка

    первоначальной строки, начинающегося с подстроки "how".

    Функция strtok

    Библиотека функций для работы со строками имеет функцию strtok, которая

    дает вам возможность разбить строку на подстроки на основании заданного

    набора символов-ограничителей.

    Подстроки иногда называются лексемами.

    Прототип функции strtok:

    char* strtok(char *target, const char * delimiters);

    Функция разбивает строку на лексемы, согласно символам-ограничителям,

    заданным в параметре delimeters. В следующем примере показано, как работать

    с этой функцией и как получать лексемы, на которые была разбита строка.

    Функция strtok вводит символ '\0' после каждой лексемы. (Опять же не

    забудьте сохранить копию вашей строки в другой строковой переменной.)

    Пример

    #include // см. файл Ex02.cpp

    #include

    int main()

    {

    char *str = "(Base_Cost + Profit) * Margin";

    char *tkn = "+*()";

    char *ptr = str;

    printf("%s\n", str);

    // Первый вызов функции

    ptr = strtok(str, tkn);

    printf("Лексемы этой строки: %s", ptr);

    while (ptr)

    {

    // Первый аргумент должен быть равен нулю

    if ((ptr = strtok(0, tkn)) != 0)

    printf (",%s", ptr);

    }

    printf("\n");

    return 0;

    }

    В результате выполнения этой программы на экран выводятся следующие строки:

    (Base_Cost + Profit) * Margin

    Лексемы этой строки: Base_Cost, Profit, Margin

    Рассмотрим пример программы поиска символов и строк. Листинг 7

    (List7_7.cpp) содержит исходный текст программы STRING4.CPP. Программа

    выполняет следующие задачи:

    . Запрашивает у вас ввод основной строки

    . Запрашивает строку поиска

    . Предлагает вам ввести символ поиска

    . Выводит линейку цифр и основную строку

    . Выводит номер символа в основной строке, с которого начинается строка

    поиска *

    . Выводит номер символа в основной строке, совпавшего с символом поиска.

    Основы объектно-ориентированного программирования СИНТАКСИС ОСНОВНЫХ

    КОНСТРУКЦИЙ

    Объявление базовых классов

    В С++ мы имеем возможность объявлять классы, которые инкапсулируют

    элементы-данные и функции-элементы. Эти функции изменяют и позволяют

    обращаться к значениям данных-элементов и выполняют другие задачи.

    Базовый класс

    Базовый класс определяется следующим образом (синтаксис):

    class className

    {

    private:

    protected:

    public:

    };

    Пример 1:

    class point

    {

    protected:

    double х;

    double у;

    public:

    point(double xVal, double yVal);

    double getX();

    double getY();

    void assign(double xVal, double yVal);

    point& assign(point &pt);

    };

    Разделы класса

    Классы С++ имеют три различных уровня доступа к своим элементам - как к

    данным, так и к функциям:

    - Закрытые (частные) элементы

    - Защищенные элементы

    - Открытые элементы

    К данным в закрытом разделе имеют доступ только функции-элементы

    класса.

    Классам-потомкам запрещен доступ к закрытым данным своих 6азовых

    классов.

    К данным в защищенной секции имеют доступ функции-элементы класса и

    классов-потомков. Данные из открытой секции находятся в области видимости

    функций-элементов класса, функций-элементов классов-потомков, и вообще

    доступны кому угодно.

    Существуют следующие правила для разделов класса:

    1. Разделы могут появляться в любом порядке.

    2. Один и тот же раздел можно определять несколько раз.

    3. Если не определен ни один раздел, компилятор (по умолчанию) объявляет

    все элементы закрытыми.

    4. Помещать данные-элементы в открытый раздел следует только в том случае,

    если в этом есть необходимость, например, если это упрощает вашу задачу.

    Обычно элементы-данные помещаются в защищенный раздел, чтобы к ним

    имели доступ функции-элементы классов-потомков.

    5. Используйте для изменения значений данных и доступа к ним функции-

    элементы. При использовании функции вы можете осуществлять проверку

    данных и, если нужно, изменять другие данные.

    6. Класс может иметь несколько конструкторов.

    7. Класс может иметь только один деструктор, который должен объявляться в

    открытом разделе класса.

    8. Функции-элементы (в том числе конструкторы и деструкторы), состоящие из

    нескольких операторов, должны определяться вне объявления класса.

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

    определяется класс. Это напоминает порядок работы с обычными функциями:

    задание прототипа и определение функции.

    Конструкторы являются специфическим типом функций-элементов, тип

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

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

    класса. Деструктор вызывается для разрушения представителя класса.

    При определении функции-элемента вы должны указать ее имя и имя ее

    класса. Сначала вы должны Сначала необходимо указать имя класса (т.н.

    квалификатор), а затем, через два двоеточия (::), имя функции. В качестве

    примера рассмотрим такой класс:

    class point

    {

    protected:

    double x;

    double y;

    public:

    point(double xVal, double yVal);

    double getX();

    // другие функции-элементы

    };

    Определения конструктора и функций-элементов должны выглядеть так

    point::point (double xVal, double yVal)

    {

    // операторы

    }

    double point::getX()

    {

    // операторы

    }

    После того, как вы объявили класс, вы можете использовать имя класса в

    качестве спецификатора типа данных при объявлении представителей класса.

    Синтаксис объявления тот же, что и при объявлении переменной.

    В листинге 8.1 приведен исходный текст программы RECT.CPP. Программа

    предлагает вам ввести длину и ширину прямоугольника (в данном примере

    прямоугольник является объектом). Затем программа выводит значения длины,

    ширины и площади определенного вами прямоугольника.

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

    Конструкторы и деструкторы в С++ вызываются автоматически, что

    гарантирует правильное создание и разрушение объектов класса.

    Общий вид (синтаксис) объявления конструктора:

    class className

    {

    public:

    className(); // конструктор по умолчанию

    className(const className &c); // конструктор копии

    className(); // остальные конструкторы

    };

    Пример 2:

    // Замечание: Здесь только объявление класса без описания объявленных

    // функций-параметров

    class point

    {

    protected:

    double x;

    double y;

    public:

    point();

    point(double xVal, double yVal);

    point(const point &pt);

    double getX();

    double getY();

    void assign(double xVal, double yVal);

    point& assign(point &pt);

    };

    int main()

    {

    point p1;

    point p2(10, 20);

    point p3(p2);

    p1.assign(p2);

    cout ] parentClass

    {

    private:

    protected:

    public:

    };

    Пример 4 объявления класса Rectangle и класса-потомка Box:

    class Rectangle

    {

    protected:

    double length;

    double width;

    public:

    Rectangle(double len, double wide);

    double getLength() const;

    double getWidth() const;

    double assign(double len, double wide);

    double calcArea();

    };

    class Вох : public Rectangle

    {

    protected:

    double height;

    public:

    Box(double len, double wide, double height);

    double getHeight () const;

    assign(double len, double wide, double height);

    double calcVolume();

    };

    (см. LIST8-3.CPP)

    Виртуальные функции

    Мы уже упоминали о полиморфизме - важной особенности объектно-

    ориентированного программирования. Рассмотрим следующий пример (6):

    #include

    class X

    {

    public:

    double A(double x) { return x * x; }

    double B(double x) { return A(x) / 2; }

    };

    class Y : public X

    {

    public:

    double A(double x) { return x * x * x; }

    };

    int main ()

    {

    Y y;

    cout );

    };

    class className2 : public className1

    {

    // функции-элементы

    virtual returnType functionName();

    };

    Пример 7, показывающий, как при помощи виртуальных функций можно

    реализовать полиморфное поведение классов X и Y:

    #include

    class X

    {

    public:

    virtual double A(double x) { return x * x; }

    double B (double x) { return A(x) / 2; }

    };

    class Y : public X

    {

    public:

    virtual double A(double x) { return x * x * x; }

    };

    main()

    {

    Y y;

    cout

    class A

    {

    public:

    A() {}

    virtual void foo(char c)

    { cout );

    };

    Пример 9:

    class String

    {

    protected:

    char *str;

    int len;

    public:

    String();

    ~String();

    // другие функции-элементы

    friend String& append(String &str1, String &str2);

    friend String& append(const char* str1, String &str2);

    friend String& append(String &str1, const char* str2);

    };

    Дружественные функции могут решать задачи, которые при помощи

    функций-элементов решаются с трудом, неуклюже или не могут быть решены

    вообще.

    Рассмотрим простой пример использования дружественных функций. Текст

    программы FRIEND.CPP представлен в листинге 8.5. Программа следит за

    памятью, отведенной для хранения массива символов. Эта программа - первый

    шаг к созданию класса string.

    Операции и дружественные операции

    Последняя программа использовала функции-элементы и дружественную

    функцию, которые реализовали действия, выполняемые в стандартных типах с

    помощью операций вроде = и +. Подход типичен для языков C и Pascal, потому

    что эти языки не поддерживают определяемые пользователем операции. В

    отличии от них C++ позволяет вам объявлять операции и дружественные

    операции. Эти операции включают в себя: +, -, *, /, %, ==, !=, =,

    >, +=, -=, *=, /=, %=, [],

    (), >. Обратитесь к описанию языка C++, где обсуждаются детали

    определения этих операций. С++ трактует операции и дружественные операции

    как специальный тип функций-элементов и дружественных функций.

    Общий синтаксис для объявления операций и дружественных операций:

    class className

    {

    public:

    // конструкторы и деструктор

    // функции-элементы

    // унарная операция

    returnType operator operatorSymbol();

    // бинарная операция

    returnType operator operatorSymbol(operand);

    // унарная дружественная операция

    friend returnType operator operatorSymbol(operand);

    // бинарная дружественная операция

    friend returnType operator operatorSymbol(firstOperand, secondOperand);

    };

    Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.