на тему рефераты
 
Главная | Карта сайта
на тему рефераты
РАЗДЕЛЫ

на тему рефераты
ПАРТНЕРЫ

на тему рефераты
АЛФАВИТ
... А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я

на тему рефераты
ПОИСК
Введите фамилию автора:


Реферат: Лекции по C++


Оператор вывода в строке 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 <iostream.h> //см. файл 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 выполняет сравнение заданного количества символов двух строк без учета регистра символов.

Прототип функции 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 <stdio.h> // см. файл Ex02.cpp

#include <string.h>

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. Программа выполняет следующие задачи:

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

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

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

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

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

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

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

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

   В С++ мы имеем возможность объявлять классы, которые инкапсулируют элементы-данные и функции-элементы. Эти функции изменяют и позволяют обращаться к значениям данных-элементов и выполняют другие задачи.

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


на тему рефераты
НОВОСТИ на тему рефераты
на тему рефераты
ВХОД на тему рефераты
Логин:
Пароль:
регистрация
забыли пароль?

на тему рефераты    
на тему рефераты
ТЕГИ на тему рефераты

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


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