МЕНЮ


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

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


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

    символов, как это задано вторым аргументом printf:

    printf("%7.*f", 10, 3.3244);

    Символы F, N, h, l и L являются символами размера, переопределяющими размер

    по умолчанию. Символы F и N применяются с указателями, far и near

    соответственно. Символы h, l, и L используются для указания соответственно

    типов short int, long или long double.

    Символам типа данных должен предшествовать форматирующий символ %. В

    таблице 7.2 мы показали возможные значения флагов форматирующей строки

    printf. Символы типов данных перечислены в таблице 7.3.

    Таблица 3. Символы типов данных строки формата функции printf

    |Тип данных|символ|результат |

    | |типа | |

    |Символ |c |Один символ |

    | |d |Десятичное целое со знаком |

    | |i |Десятичное целое со знаком |

    | |O |Восьмеричное целое без знака |

    | |N |Десятичное целое без знака |

    | |X |Шестнадцатеричное целое без знака; набор цифр - |

    | | |0123456789abcdef |

    | |X |Шестнадцатеричное целое без знака; набор цифр - |

    | | |0123456789ABCDEF |

    |Указатель |P |Для указателей near выводит только смещение в виде: |

    | | |0000. Указатели far отображаются в виде: SSSS:0000 |

    |Указатель |N | |

    |на целое | | |

    |Вещественн|F |Выводит величину со знаком в формате [-]dddd.dddd |

    |ое | | |

    | |E |Выводит вещественную величину со знаком в |

    | | |экспоненциальном формате [-]d.dddde[+|-]ddd |

    | |Е |Выводит вещественную величину со знаком в |

    | | |экспоненциальном формате [-]d.ddddE[+|-]ddd |

    | |G |Выводит вещественную величину со знаком в формате f или |

    | | |е в зависимости от ее значения и заданной точности |

    | |G |Выводит вещественную величину со знаком в формате F или |

    | | |Е в зависимости от ее значения и заданной точности |

    |Указатель |S |Выводит строку символов, пока не встретит |

    | | |нуль-терминатор строки |

    Разберем небольшой пример. Программа OUT2.CPP, исходный код которой

    приведен в листинге 3, создана на основе программы OUT1.CPP. В этой

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

    printf. Программа выводит те же числа, что и OUT1.CPP, используя три

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

    Листинг 3. Исходный текст программы OUT2.CPP в файле List7-3.CPP

    |01 |// Программа, использующая printf для форматирования вывода |

    |02 | |

    |03 |#include |

    |04 | |

    |05 |int main() |

    |06 | Printf(" %6.4f / %10.4lf = %7.5lf\n", |

    Пример вывода программы из листинга 3:

    128 + 67 = 195

    Вывод использует спецификации преобразования %lf :

    355.0000 / 113.0000 = 3.14159

    Вывод использует спецификации преобразования %le :

    3.5500e+02 / 1.1300e+02 = 3.14159e+00

    Вывод использует спецификации преобразования %lg :

    355 / 113 = 3.1416

    Символьная переменная aChar: @

    ASCII-код @: 64

    В программе из листинга 3 объявляется целый набор переменных различных

    типов. Оператор вывода в строках 13 и 14 выводит целые, используя

    спецификацию формата %d. В таблице 4 приведены результаты действия

    спецификаций преобразования из строки 13. Обратите внимание на то, что

    первая переменная была преобразована из типа unsigned char в тип integer.

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

    из строки 13

    |Спецификация формата|Переменная |Тип данных |Тип после |

    | | | |преобразования |

    |%3d |aByte |unsigned |Int |

    | | |char | |

    |%2d |anInt |int |Int |

    |%3d |aByte + |int |Int |

    | |anInt | | |

    Оператор вывода в строке 17 выводит переменные aSingle, aDouble и выражение

    aSingle / aDouble, используя спецификации преобразования %6.4f, %6.41f и %

    7.51f. Точность представления задается ими равной 4, 4 и 5 цифрам, а

    минимальная ширина поля 6, 6 и 7 цифрам соответственно. Две последних

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

    Оператор вывода в строке 21 подобен оператору из строки 17. Отличие состоит

    в том, что используется е-формат вместо f-формата. Соответственно три

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

    Оператор из строки 25 также похож на оператор из строки 17. Основное

    отличие состоит в том, что вместо f-формата используется g-формат. В

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

    являются целыми величинами.

    Оператор вывода в строке 28 выводит содержимое переменной aChar по формату

    %с. Оператор вывода в строке 29 выводит ту же переменную aChar дважды,

    первый раз как символ, а второй раз как целое (или, если быть точным,

    выводится ASCII-код символа). Для этого используются спецификации

    преобразования %с и %d соответственно.

    Массивы символов в C++

    В C++ имеется специальный класс для работы со строками, которого, конечно,

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

    нуль-символом (ASCII-код которого равен нулю), поэтому большое количество

    программ, написанных на С, используют символьные массивы. Более того, и в

    C++, несмотря на то, что он имеет класс для работы со строками, находится

    применение массивам символов. Поэтому термин «строка» имеет два значения:

    строка в смысле C++ и строка как массив символов. Весь этот раздел будет

    посвящен тому, как нужно и не нужно использовать символьные массивы.

    Символ '\0' также называют нуль-терминатором. Строки, оканчивающиеся нуль-

    терминатором, называют еще ASCIIZ-строками, где символ Z обозначает ноль —

    ASCII-код нуль-терминатора. Еще этот символ называют NUL-символом,

    поскольку этот термин является его именем в ASCII.

    Все строки обязательно должны оканчиваться нуль-терминатором, и при

    объявлении размера массива необходимо это учитывать. Когда вы объявляете

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

    символ для нуль-терминатора. Использование строк с конечным нулем также

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

    реализацией C++. Кроме того, структура ASCIIZ-строк очень проста.

    Ввод строк

    В программах, которые мы рассматривали, операторы потокового вывода

    выводили строковые константы; C++ поддерживает потоковый вывод для строк

    как специального не-предопределенного типа данных. (Можно сказать, что это

    было сделано по требованию масс.) Операции и синтаксис для вывода строковых

    переменных остаются прежними. При вводе строк операция извлечения из потока

    » не всегда будет работать так, как вы ожидаете, поскольку строки часто

    содержат пробелы, которые игнорируются оператором ввода; поэтому вместо

    оператора ввода вам нужно использовать функцию getline. Эта функция вводит

    заданное количество символов.

    Функция getline

    Перегруженная функция getline объявляется следующим образом:

    istreams getline( signed char *buffer,

    int size,

    char delimiter = '\n') ;

    istreams getline( unsigned char *buffer,

    int size,

    char delimiter = '\n') ;

    istream& getline( char *buffer,

    int size,

    char delimiter = '\n') ;

    Параметр buffer является указателем на строку, в которую помещаются

    вводимые символы. Параметр size задает максимальное количество вводимых

    символов. Параметр delimeter определяет символ-ограничитель, при появлении

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

    символов. Параметр delimeter имеет аргумент по умолчанию, равный '\n'. В

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

    при нажатии клавиши

    Пример

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

    int main()

    {

    char name[80] ;

    cout « "Enter your name: ";

    cin.getline(name, sizeof(name) - 1);

    cout « "Hello " « name « ", how are you?";

    return 0;

    }

    Функции, объявленные в STRING. H

    Стандартная библиотека для работы со строками содержит много полезных

    функций (объявляемых в STRING.H), разработанных коллективными усилиями

    многих программистов на С. В файлах заголовка STDIO.H и IOS-TREAM.H также

    имеются прототипы строковых функций. Комитетом ANSI/ISO C++ предложен класс

    для работы со строками. Строки этого класса больше похожи на строки в

    языках Pascal и BASIC. (Мы познакомимся с классами в День 8, а со строковым

    классом в День 11.) Этот раздел будет посвящен рассмотрению некоторых (ни в

    коей мере не всех) функций, объявленных в STRING.H.

    Некоторые функции из STRING.H имеют несколько версий. Дополнительные версии

    этих функций, имеющих в имени префиксы _f, f или _ работают с указателями

    типа far. Этих версий вы не встретите в плоской, 32-битной модели памяти

    компилятора Borland.

    Присвоение значений строкам

    C++ поддерживает два способа присвоения значений строкам. Вы можете

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

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

    строковая константа.

    Инициализация строки

    Общий метод инициализации строки:

    char stringVar[stringSize] = stringLiteral;

    Пример

    char a3tring[81] = "Borland C++ 5 in 21 days";

    char Named = "Rene Kinner";

    Второй способ присвоить значение строке — это вызвать функцию, которая

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

    символ. Эта функция называется strcpy. Она предполагает, что копируемая

    строка оканчивается символом NUL и прекращает копирование, как только

    встретит этот символ.

    Функция strcpy

    Прототип функции strcpy таков:

    char* strcpy(char *target, const char *source);

    Функция копирует строку source в строку target. Функция предполагает, что

    целевая строка имеет размер, достаточный для того, чтобы вместить

    содержимое строки-источника.

    Пример

    char name[41] ;

    strcpy(name, "Borland C++ 5");

    Переменная name содержит строку "Borland C++ 5".

    Функция strdup

    Функция strdup копирует одну строку в другую, при этом отводит необходимое

    количество памяти для целевой строки.

    Прототип функции strdup таков:

    char* strdup(const char *source);

    Функция копирует строку source и возвращает указатель на строку-копию.

    Пример

    char *string1 = "Монархия в Испании";

    char *string2;

    string2 = strdup(string1);

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

    string2, строка string1будет скопирована в строку string2.

    Функция strncpy

    Библиотека строковых функций предлагает также функцию strncpy, копирующую

    заданное количество символов из одной строки в другую.

    Прототип функции strncpy таков:

    char * strncpy(char *target, const char *source, size_t num);

    Функция копирует num символов из строки source в строку target. Функция не

    выполняет ни усечение, ни заполнение строки.

    Пример

    char str1[] = "Pascal";

    char str2[] = "Hello there";

    strcnpy(strl, str2, 5);

    Переменная strl содержит строку "Hellol". Заметьте, что символ ‘l’ строки-

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

    Определение длины строки

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

    Функция strlen

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

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

    Прототип функции strncpy таков:

    size_t strlen (const char *string) ,

    Функция strlen возвращает длину строки string. size_t — это имя,

    приписанное типу unsigned int оператором typedef.

    Пример

    char str[] = "1234567890";

    size_t i;

    i = strlen(str),

    Переменной i будет присвоено значение 10.

    Конкатенация строк

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

    получается объединением двух или более строк.

    Присоединить одну строку к другой можно функцией strcat.

    Функция strcat

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

    Прототип функции strcat таков:

    char *strcat(char *target, const char *source) ;

    Функция добавляет к содержимому целевой строки содержимое строки-источника

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

    строка может вместить содержимое объединенной строки.

    Пример

    char string[81] ;

    strcpy(string, "Turbo");

    strcat (string, " C++");

    Переменная string содержит строку "Turbo C++".

    Функция strncat

    Функция strncat добавляет к содержимому целевой строки указанное количество

    символов из строки-источника.

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

    char *strncat(char *target, const char *source, size_t num);

    Функция добавляет к содержимому целевой строки num символов из строки-

    источника и возвращает указатель на целевую строку.

    char strl[81] = "Hello I am ";

    char str2[41] = "Keith Thompson";

    strncat(strl, str2, 5);

    Переменная strl теперь содержит строку "Hello I am Keith".

    Пример использования функций getline, strlen и strcat в файле List7_4.cpp

    (исходный код программы STRING.CPP). Программа выполняет следующие задачи:

    . Предлагает вам ввести строку; ввод не должен превышать 40 символов

    . Предлагает вам ввести вторую строку; ввод не должен превышать 40 символов

    . Выводит число символов, содержащихся в каждой строке

    . Присоединяет вторую строку к первой

    . Выводит результат конкатенации

    . Выводит длину объединенной строки

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

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

    . Выводит содержимое объединенной строки после замены символа

    Сравнение строк

    Поскольку строки являются массивами символов, вы не можете применить

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

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

    сравнивают символы двух строк, используя для этого ASCII-коды символов. Это

    функции strcmp, stricmp, strncmp и strnicmp.

    Вообще говоря, все функции сравнения работают одинаково: возвращают 0, если

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

    величине, и положительное значение, если большей оказалась первая строка.

    Функция strcmp

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

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

    int strcmp(const char *strl, const char *str2);

    Функция сравнивает строки strl и str2. Возвращает в качестве результата

    сравнения целую величину:

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

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

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

    Пример

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

    char string2[] = "BORLAND C++";

    i = strcmp(string1, string2);

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

    так как string1 больше string2 (ASCII-коды символов в нижнем регистре

    больше ASCII-кодов символов в верхнем.)

    Функция stricmp

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

    символов.

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

    int stricmp(const char *strl, const char *str2);

    Функция сравнивает строки strl и str2, не делая различия между символами в

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

    величину:

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

    = 0 когда strl равна str24

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

    Пример

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

    char string2[] = "BORLAND C++";

    int i = strcmp(string1, string2);

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

    string1 и string2 отличаются друг от друга только регистром символов.

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

    строк с учетом регистра символов.

    Функция strncmp

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

    int strncmp(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 = stricmp(string1, string2, 9);

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

    так как значение "Borland С" меньше, чем "Borland Р".

    Функция strnicmp

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

    строк без учета регистра символов.

    Страницы: 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 г.
    При использовании материалов - ссылка на сайт обязательна.