SlideShare a Scribd company logo
1 of 6
Download to read offline
Лекция №7 для дисциплин: «Прикладное программирование» и «Языки
программирования»
1
Лекция 7
2.3 Строковые переменные и константы
Стандартная библиотека языка С++ предоставляет программистам строковый тип данных
(избавляет от использования массивов символов char[ ]).
Мы будем использовать тип данных string наряду со стандартными встроенными типами
данных. И вы на первый взгляд не будете замечать никаких различий, хотя на самом деле это
абстрактный тип данных, созданный на основе объектно-ориентированных возможностей языка
С++. Надеюсь со временем вы тоже сможете создавать АТД, которыми можно будет
пользоваться так же удобно и свободно, как и классом string.
Строковый тип данных позволяет хранить строки переменной длины, причем длину можно
менять в процессе выполнения программы. Строковый тип представляет операторы,
выполняющие такие операции над строками, как конкатенация, присваивание, замещение и др.
Для того, чтобы можно было создавать строковую переменную, необходимо подключить
описание этого типа данных из стандартной библиотеки.
#include <iostream>
#include <string>
using namespaсe std;
void main()
{
string name="Vitaly"; // объявление, определение, инициализация
string lastname="Domnenko";
name+="M."+lastname; // конкатенация с присваиванием (накапливающее присваивание)
cout<<"My name is "<<name<<endl; // вывод
}
Используя [ ] можно получить символ из любой позиции
char ch=name[5]; // символы нумеруются с нуля
Лексикографическое сравнение осуществляется с использованием операторов == < <= > >=
!=. При лексикографическом сравнении последовательно сравниваются коды символов строки.
Те символы считаются "больше", чьи коды "больше"и наоборот.
Кодировка (кодовая таблица) - это однозначное соответствие между целым число (кодом) и
символом. При этом символ - это буква, цифра и другие графические знаки. Кодировки обычно
составляют так, что символы следуют в алфавитном порядке и символ 'а' имеет наименьший код,
а символ 'z' наибольший. Таким образом, выполняя лексикографическое сравнение можно
Лекция №7 для дисциплин: «Прикладное программирование» и «Языки
программирования»
2
разместить слова (строки) в алфавитном порядке. Это справедливо и для символов
кириллического алфавита. Но не всегда, т.к. существует кодировки, в которой кириллические
символы располагаются не в алфавитном порядке. Это кодировка КОИ8, которая обычно
используется в операционных системах UNIX. Если вы пишете программу для UNIX, то нужно
помнить, что простое лексикографическое сравнение не даст ожидаемого результата и нужно
усложнять программу.
В нашем случае (при программировании для DOS или Windows) используются кодировки
CP866 и СP1251 лексикографическое сравнение справедливо и дает нужный результат.
Ну и операторы для ввода/вывода строковых переменных >> << работают также как и для
переменных других типов.
Функция Описание
Конструкторы
string() конструктор по умолчанию, создает пустую строку
string(const char* p) преобразующий конструктор
string(const string& str, size t
pos=0, size t n=npos)
копирующий конструктор (npos обычно равен -1 и указывает, что
память не была выделена)
string(const char* p, size_t n) копирует n символов, р является базовым адресом
string(char c, size t n=l) создает строку из n символов с
Перегруженные операторы
string& operator= (const
string& s)
оператор присваивания
string& operator+= (const
string& s)
добавляет строку
char operator[] (size t pos)
const
возвращает символ из позиции pos
char& operator[] (size t pos) возвращает ссылку на символ из позиции pos
Функции-члены
string& append(const string& Добавляет n символов начиная от позиции pos
Лекция №7 для дисциплин: «Прикладное программирование» и «Языки
программирования»
3
s, size_t pos=0, size t n=npos);
string& assign(const string&
s, size_t pos=0, size_t
n=npos);
строковому объекту присваивается n символов, начиная от позиции
pos
string& insert(size_t posl,
const string& str, size_t
pos2=0 , size_t n=npos);
вставляет n символов, полученных из str, начиная с позиции pos2, в
строку с позиции posl
string& remove(size_t pos=0 ,
size_t n=npos);
Удаляются n символов из строки начиная с позиции pos
string& replace(posl, nl, str,
pos2=0, n2=npos);
в неявной строке начиная с позиции posl заменяет nl символов n2
символами из подстроки str с позиции pos2
string& replace(pos, n, p, n2); заменяет n символов в позиции pos используя char* p из n2
символов или char* p до завершающего нуля, или повторяя символ
с rep раз
char get_at (pos) const; возвращает символ из позиции pos
void put_at (pos, c); помещает символ с в позицию pos
size_t length() const; возвращает длину строки
const char* c_str() const; преобразует строку в традиционное char* представление
const char* data() const; возвращает базовый адрес строкового представления
void resize(n, c); void
resize(n);
изменяет строку, делая ее длину равной п; в первой функции в
качестве заполняющего символа выступает с, а во второй - символ
eos () (end-of-string, конец строки)
void reserve(size_t
res_arg);size_t reserve() const;
выделяет память под строку; первая функция переустанавливает
this; вторая возвращает закрытый член res - размер выделенного
фрагмента
size_t copy(p, n, pos=0) const; п симолов строки, начиная с позиции pos, копируются в char* p
string substr(pos=0, n=pos)
const;
возвращается подстрока из п символов строки
Лекция №7 для дисциплин: «Прикладное программирование» и «Языки
программирования»
4
int compare(const string& str,
size_t pos=0, size_t n=npos)
const;
сравнивает п символов строки, начиная с позиции pos, со строкой
str. Возвращается ноль, если строки равны; в противном случае
возвращается положительное или отрицательное целое значение,
показывающее, что неявная строка лексикографически больше или
меньше чем строка str.
size_t find (const string& str,
size_t pos=0) const;
в строке начиная с позиции pos производится поиск строки str.
Если она найдена, возвращается позиция, в которой она
начинается; в противном случае возвращается позиция npos
size_t rfind(str, pos=npos)
const;
похоже на find (), но при поиске первого совпадения строка
сканируется в обратном направлении
size_t find_first_of(str, pos=0)
const;
производится поиск первого вхождения str начиная с позиции pos
size_t find_last_of(str,
pos=npos) const;
аналогично, но в обратном направлении
size_t find_first_not_of(str,
pos=0) const;
производится поиск первого символа, который не соответствует ни
одному из символов str начиная с позиции pos
size_t find_last_not_of(str,
pos=npos) const;
аналогично, но в обратном направлении
2.4 Математические функции
#include <cmath>
using namespace std;
Функция Возвращаемое значения
double atof(const char* string) вещественное число, заданное массивом символов string
int atoi(const char* string) целое число, заданное массивом символов string
int abs(int n) абсолютное значение (модуль) целочисленного аргумента n
double acos(double x) арккосинус х в пределах -1.0 до 1.0
double asin(double x) арксинус х в пределах -1.0 до 1.0
Лекция №7 для дисциплин: «Прикладное программирование» и «Языки
программирования»
5
double atan(double x)
арктангенс х в пределах до
double atan2(double x, double y) арктангенс х/у в пределах до
double ceil(double x) наименьшее целое большее или равное х
double cos(double x) косинус х
double exp(double x)
double fabs(double x) абсолютное значение (модуль) вещественного числа х
double floor(double x) наибольшее целое большее или равное х
double fmod(double x, double y) остаток от деления х на у
double hypot(double x, double y) длина гипотенузы при заданных катетах х и у
double log(double x) натуральный логарифм х
double log10(double x) десятичный логарифм х
double pow(double x, double y) х в степени у
double sin(double x) синус х
double sqrt(double x)
double tan(double x) тангенс х
#include <cstdlib>
using namespace std;
Функция Возвращаемое значения
int rand() псевдослучайное число в диапазоне от 0 до RAND_MAX
void srand(unsigned int seed) устанавливает стартовую точку для генерации случайных чисел
#include <ctime>
using namespace std;
Лекция №7 для дисциплин: «Прикладное программирование» и «Языки
программирования»
6
Функция Возвращаемое значения
clock_t clock() процессорное время
double difftime(time_t timerl, time_t timer2) разность между двумя временными значениями
time_t time(time_t* timer) системное время

More Related Content

What's hot

Massivi 11(urok 1)
Massivi 11(urok 1)Massivi 11(urok 1)
Massivi 11(urok 1)toniberd
 
указатель на указатель 1
указатель на указатель 1указатель на указатель 1
указатель на указатель 1Aleksandr Pavlenko
 
практика 7
практика 7практика 7
практика 7student_kai
 
Презентация. Основы Pascal
Презентация. Основы PascalПрезентация. Основы Pascal
Презентация. Основы PascalEvgen67
 
паскаль язык структурного программирования
паскаль   язык структурного программированияпаскаль   язык структурного программирования
паскаль язык структурного программированияЕлена Ключева
 
Java. Логические операторы, операторы ветвления.
Java. Логические операторы, операторы ветвления.Java. Логические операторы, операторы ветвления.
Java. Логические операторы, операторы ветвления.Unguryan Vitaliy
 
Automated NP-completeness proof for 2D problems
Automated NP-completeness proof for 2D problemsAutomated NP-completeness proof for 2D problems
Automated NP-completeness proof for 2D problemsMikhail Dvorkin
 
язык работы с КМАС (Yafoll сообщение 1)
язык работы с КМАС (Yafoll сообщение 1)язык работы с КМАС (Yafoll сообщение 1)
язык работы с КМАС (Yafoll сообщение 1)Alex Shkotin
 
лабораторная работа №2
лабораторная работа №2лабораторная работа №2
лабораторная работа №2Zhanna Kazakova
 
03
0303
03JIuc
 
Java. Cистемы счислния, битовые операции
Java. Cистемы счислния, битовые операцииJava. Cистемы счислния, битовые операции
Java. Cистемы счислния, битовые операцииUnguryan Vitaliy
 
10кл общие сведения о языке программирования паскаль
10кл общие сведения о языке программирования паскаль10кл общие сведения о языке программирования паскаль
10кл общие сведения о языке программирования паскальAnna_Malina
 
Внешние языки DSL на funcparserlib
Внешние языки DSL на funcparserlibВнешние языки DSL на funcparserlib
Внешние языки DSL на funcparserlibAndrey Vlasovskikh
 
сбор урока
сбор урокасбор урока
сбор урокаLIANA180
 

What's hot (19)

Slides3
Slides3Slides3
Slides3
 
C language. Introduction
C language. IntroductionC language. Introduction
C language. Introduction
 
Massivi 11(urok 1)
Massivi 11(urok 1)Massivi 11(urok 1)
Massivi 11(urok 1)
 
указатель на указатель 1
указатель на указатель 1указатель на указатель 1
указатель на указатель 1
 
Dynamic memory
Dynamic memoryDynamic memory
Dynamic memory
 
практика 7
практика 7практика 7
практика 7
 
Презентация. Основы Pascal
Презентация. Основы PascalПрезентация. Основы Pascal
Презентация. Основы Pascal
 
паскаль язык структурного программирования
паскаль   язык структурного программированияпаскаль   язык структурного программирования
паскаль язык структурного программирования
 
Java. Логические операторы, операторы ветвления.
Java. Логические операторы, операторы ветвления.Java. Логические операторы, операторы ветвления.
Java. Логические операторы, операторы ветвления.
 
Automated NP-completeness proof for 2D problems
Automated NP-completeness proof for 2D problemsAutomated NP-completeness proof for 2D problems
Automated NP-completeness proof for 2D problems
 
язык работы с КМАС (Yafoll сообщение 1)
язык работы с КМАС (Yafoll сообщение 1)язык работы с КМАС (Yafoll сообщение 1)
язык работы с КМАС (Yafoll сообщение 1)
 
лабораторная работа №2
лабораторная работа №2лабораторная работа №2
лабораторная работа №2
 
03
0303
03
 
Java. Cистемы счислния, битовые операции
Java. Cистемы счислния, битовые операцииJava. Cистемы счислния, битовые операции
Java. Cистемы счислния, битовые операции
 
10кл общие сведения о языке программирования паскаль
10кл общие сведения о языке программирования паскаль10кл общие сведения о языке программирования паскаль
10кл общие сведения о языке программирования паскаль
 
Тодуа. Методы разработки интерпретатора языка Рефал-2
Тодуа. Методы разработки интерпретатора языка Рефал-2Тодуа. Методы разработки интерпретатора языка Рефал-2
Тодуа. Методы разработки интерпретатора языка Рефал-2
 
8 3-1
8 3-18 3-1
8 3-1
 
Внешние языки DSL на funcparserlib
Внешние языки DSL на funcparserlibВнешние языки DSL на funcparserlib
Внешние языки DSL на funcparserlib
 
сбор урока
сбор урокасбор урока
сбор урока
 

Viewers also liked

Nebesnaya geometriya
Nebesnaya geometriyaNebesnaya geometriya
Nebesnaya geometriyaIvanchik5
 
Entroido
EntroidoEntroido
Entroidoaurelio
 
Волонтерский отряд "Рядом с тобой"
Волонтерский отряд "Рядом с тобой"Волонтерский отряд "Рядом с тобой"
Волонтерский отряд "Рядом с тобой"gagrinaav
 
Hardware synth
Hardware synthHardware synth
Hardware synthHoward Mao
 
Rodovia Na Bolivia Port
Rodovia Na Bolivia PortRodovia Na Bolivia Port
Rodovia Na Bolivia Portcab3032
 
Plan community work mejia
Plan community work mejiaPlan community work mejia
Plan community work mejiaacrosinus
 
Calendario de adviento diciembre 2012
Calendario de adviento diciembre 2012Calendario de adviento diciembre 2012
Calendario de adviento diciembre 2012MJAO2012
 
Experiencias en la implementación de la IDE local de La Habana Vieja
Experiencias en la implementación  de la IDE local de La Habana Vieja Experiencias en la implementación  de la IDE local de La Habana Vieja
Experiencias en la implementación de la IDE local de La Habana Vieja P Batista Echevarría
 
02 02-11 hoje-em_dia_medula
02 02-11 hoje-em_dia_medula02 02-11 hoje-em_dia_medula
02 02-11 hoje-em_dia_medulaRealize Eventos
 
Anjos de uma asa
Anjos de uma asaAnjos de uma asa
Anjos de uma asaRita Steter
 
объектно ориентированная платформа для построения
объектно ориентированная платформа для построенияобъектно ориентированная платформа для построения
объектно ориентированная платформа для построенияGennady Zavyalov
 
Nepolnye kvadratnye uravneniya
Nepolnye kvadratnye uravneniyaNepolnye kvadratnye uravneniya
Nepolnye kvadratnye uravneniyaIvanchik5
 
Dólar 18.06.2012
Dólar 18.06.2012Dólar 18.06.2012
Dólar 18.06.2012Adolfo Dias
 
Bibliotecas de abad+â¡as monastrios y
Bibliotecas de abad+â¡as  monastrios y Bibliotecas de abad+â¡as  monastrios y
Bibliotecas de abad+â¡as monastrios y aviber
 

Viewers also liked (20)

Nebesnaya geometriya
Nebesnaya geometriyaNebesnaya geometriya
Nebesnaya geometriya
 
Entroido
EntroidoEntroido
Entroido
 
Волонтерский отряд "Рядом с тобой"
Волонтерский отряд "Рядом с тобой"Волонтерский отряд "Рядом с тобой"
Волонтерский отряд "Рядом с тобой"
 
Чуб
Чуб Чуб
Чуб
 
Hardware synth
Hardware synthHardware synth
Hardware synth
 
Rodovia Na Bolivia Port
Rodovia Na Bolivia PortRodovia Na Bolivia Port
Rodovia Na Bolivia Port
 
A familia
A familiaA familia
A familia
 
Plan community work mejia
Plan community work mejiaPlan community work mejia
Plan community work mejia
 
5
55
5
 
отчетоб исполнении плана фхд
отчетоб исполнении плана фхдотчетоб исполнении плана фхд
отчетоб исполнении плана фхд
 
Am24262265
Am24262265Am24262265
Am24262265
 
Calendario de adviento diciembre 2012
Calendario de adviento diciembre 2012Calendario de adviento diciembre 2012
Calendario de adviento diciembre 2012
 
Experiencias en la implementación de la IDE local de La Habana Vieja
Experiencias en la implementación  de la IDE local de La Habana Vieja Experiencias en la implementación  de la IDE local de La Habana Vieja
Experiencias en la implementación de la IDE local de La Habana Vieja
 
02 02-11 hoje-em_dia_medula
02 02-11 hoje-em_dia_medula02 02-11 hoje-em_dia_medula
02 02-11 hoje-em_dia_medula
 
Anjos de uma asa
Anjos de uma asaAnjos de uma asa
Anjos de uma asa
 
объектно ориентированная платформа для построения
объектно ориентированная платформа для построенияобъектно ориентированная платформа для построения
объектно ориентированная платформа для построения
 
Educadores De Roma
Educadores De RomaEducadores De Roma
Educadores De Roma
 
Nepolnye kvadratnye uravneniya
Nepolnye kvadratnye uravneniyaNepolnye kvadratnye uravneniya
Nepolnye kvadratnye uravneniya
 
Dólar 18.06.2012
Dólar 18.06.2012Dólar 18.06.2012
Dólar 18.06.2012
 
Bibliotecas de abad+â¡as monastrios y
Bibliotecas de abad+â¡as  monastrios y Bibliotecas de abad+â¡as  monastrios y
Bibliotecas de abad+â¡as monastrios y
 

Similar to лек7

C++ Базовый. Занятие 12.
C++ Базовый. Занятие 12.C++ Базовый. Занятие 12.
C++ Базовый. Занятие 12.Igor Shkulipa
 
Java. Строки. Класс String.
Java. Строки. Класс String.Java. Строки. Класс String.
Java. Строки. Класс String.Unguryan Vitaliy
 
Программирование линейных алгоритмов
Программирование линейных алгоритмовПрограммирование линейных алгоритмов
Программирование линейных алгоритмовAndrey Dolinin
 
Cреда программирования
Cреда программированияCреда программирования
Cреда программированияirina8682
 
Правила статического анализа кода для диагностики потенциально опасных констр...
Правила статического анализа кода для диагностики потенциально опасных констр...Правила статического анализа кода для диагностики потенциально опасных констр...
Правила статического анализа кода для диагностики потенциально опасных констр...Sergey Vasilyev
 
массивы.строки
массивы.строкимассивы.строки
массивы.строкиdasha2012
 
Типы данных
Типы данныхТипы данных
Типы данныхOlgaDask
 
9. java lecture library
9. java lecture library9. java lecture library
9. java lecture libraryMERA_school
 
Язык программирования Паскаль
Язык программирования ПаскальЯзык программирования Паскаль
Язык программирования ПаскальOlgaDask
 
Cpp/cli particularities
Cpp/cli particularitiesCpp/cli particularities
Cpp/cli particularitiesmcroitor
 
модуль 03 строки
модуль 03 строкимодуль 03 строки
модуль 03 строкиYevgeniy Gertsen
 
Язык программирования Pascal
Язык программирования PascalЯзык программирования Pascal
Язык программирования PascalSchool 242
 
"Модифицируй это!" или "Больше магии Python с помощью изменения AST"
"Модифицируй это!" или "Больше магии Python с помощью изменения AST""Модифицируй это!" или "Больше магии Python с помощью изменения AST"
"Модифицируй это!" или "Больше магии Python с помощью изменения AST"PyNSK
 

Similar to лек7 (20)

C++ Базовый. Занятие 12.
C++ Базовый. Занятие 12.C++ Базовый. Занятие 12.
C++ Базовый. Занятие 12.
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Programming c++ (begin-if-else)
Programming c++ (begin-if-else)Programming c++ (begin-if-else)
Programming c++ (begin-if-else)
 
Step cpp0201
Step cpp0201Step cpp0201
Step cpp0201
 
Java. Строки. Класс String.
Java. Строки. Класс String.Java. Строки. Класс String.
Java. Строки. Класс String.
 
8 3-3
8 3-38 3-3
8 3-3
 
Программирование линейных алгоритмов
Программирование линейных алгоритмовПрограммирование линейных алгоритмов
Программирование линейных алгоритмов
 
Cреда программирования
Cреда программированияCреда программирования
Cреда программирования
 
Правила статического анализа кода для диагностики потенциально опасных констр...
Правила статического анализа кода для диагностики потенциально опасных констр...Правила статического анализа кода для диагностики потенциально опасных констр...
Правила статического анализа кода для диагностики потенциально опасных констр...
 
лек13 4
лек13 4лек13 4
лек13 4
 
массивы.строки
массивы.строкимассивы.строки
массивы.строки
 
Типы данных
Типы данныхТипы данных
Типы данных
 
9. java lecture library
9. java lecture library9. java lecture library
9. java lecture library
 
PascalABC.NET 2015-2016
PascalABC.NET 2015-2016PascalABC.NET 2015-2016
PascalABC.NET 2015-2016
 
Язык программирования Паскаль
Язык программирования ПаскальЯзык программирования Паскаль
Язык программирования Паскаль
 
Cpp/cli particularities
Cpp/cli particularitiesCpp/cli particularities
Cpp/cli particularities
 
модуль 03 строки
модуль 03 строкимодуль 03 строки
модуль 03 строки
 
Язык программирования Pascal
Язык программирования PascalЯзык программирования Pascal
Язык программирования Pascal
 
"Модифицируй это!" или "Больше магии Python с помощью изменения AST"
"Модифицируй это!" или "Больше магии Python с помощью изменения AST""Модифицируй это!" или "Больше магии Python с помощью изменения AST"
"Модифицируй это!" или "Больше магии Python с помощью изменения AST"
 

More from Anastasia Snegina

птп по ппп 2013 2014
птп по ппп 2013 2014 птп по ппп 2013 2014
птп по ппп 2013 2014 Anastasia Snegina
 
прикл.прогр птп 13 14
прикл.прогр птп 13 14прикл.прогр птп 13 14
прикл.прогр птп 13 14Anastasia Snegina
 
2012 2013 пм спп провидошина
2012 2013  пм спп провидошина2012 2013  пм спп провидошина
2012 2013 пм спп провидошинаAnastasia Snegina
 
2012 2013 пм спп провидошина
2012 2013  пм спп провидошина2012 2013  пм спп провидошина
2012 2013 пм спп провидошинаAnastasia Snegina
 
рп по у пп практике в
рп по у пп практике врп по у пп практике в
рп по у пп практике вAnastasia Snegina
 
рп по пр практике в
рп по пр практике врп по пр практике в
рп по пр практике вAnastasia Snegina
 
рп по у сп практике в
рп по у сп практике врп по у сп практике в
рп по у сп практике вAnastasia Snegina
 
рп по у пп практике вт
рп по у пп практике втрп по у пп практике вт
рп по у пп практике втAnastasia Snegina
 
рп по пр практике вт
рп по пр практике втрп по пр практике вт
рп по пр практике втAnastasia Snegina
 
рп по у сп практике вт
рп по у сп практике втрп по у сп практике вт
рп по у сп практике втAnastasia Snegina
 
рп по у пп практике вт
рп по у пп практике втрп по у пп практике вт
рп по у пп практике втAnastasia Snegina
 
рп по пр практике вт
рп по пр практике втрп по пр практике вт
рп по пр практике втAnastasia Snegina
 
рп по у сп практике вт
рп по у сп практике втрп по у сп практике вт
рп по у сп практике втAnastasia Snegina
 

More from Anastasia Snegina (20)

птп по ппп 2013 2014
птп по ппп 2013 2014 птп по ппп 2013 2014
птп по ппп 2013 2014
 
прикл.прогр птп 13 14
прикл.прогр птп 13 14прикл.прогр птп 13 14
прикл.прогр птп 13 14
 
я.прогр птп
я.прогр птпя.прогр птп
я.прогр птп
 
пп кос вт
пп кос втпп кос вт
пп кос вт
 
пп кос в
пп кос впп кос в
пп кос в
 
пп кос в
пп кос впп кос в
пп кос в
 
2012 2013 пм спп провидошина
2012 2013  пм спп провидошина2012 2013  пм спп провидошина
2012 2013 пм спп провидошина
 
2012 2013 пм спп провидошина
2012 2013  пм спп провидошина2012 2013  пм спп провидошина
2012 2013 пм спп провидошина
 
пп кос вт
пп кос втпп кос вт
пп кос вт
 
рп по у пп практике в
рп по у пп практике врп по у пп практике в
рп по у пп практике в
 
рп по пр практике в
рп по пр практике врп по пр практике в
рп по пр практике в
 
рп по у сп практике в
рп по у сп практике врп по у сп практике в
рп по у сп практике в
 
рп по у пп практике вт
рп по у пп практике втрп по у пп практике вт
рп по у пп практике вт
 
рп по пр практике вт
рп по пр практике втрп по пр практике вт
рп по пр практике вт
 
рп по у сп практике вт
рп по у сп практике втрп по у сп практике вт
рп по у сп практике вт
 
рп по у пп практике вт
рп по у пп практике втрп по у пп практике вт
рп по у пп практике вт
 
рп по пр практике вт
рп по пр практике втрп по пр практике вт
рп по пр практике вт
 
рп по у сп практике вт
рп по у сп практике втрп по у сп практике вт
рп по у сп практике вт
 
лр18
лр18лр18
лр18
 
лр15
лр15лр15
лр15
 

лек7

  • 1. Лекция №7 для дисциплин: «Прикладное программирование» и «Языки программирования» 1 Лекция 7 2.3 Строковые переменные и константы Стандартная библиотека языка С++ предоставляет программистам строковый тип данных (избавляет от использования массивов символов char[ ]). Мы будем использовать тип данных string наряду со стандартными встроенными типами данных. И вы на первый взгляд не будете замечать никаких различий, хотя на самом деле это абстрактный тип данных, созданный на основе объектно-ориентированных возможностей языка С++. Надеюсь со временем вы тоже сможете создавать АТД, которыми можно будет пользоваться так же удобно и свободно, как и классом string. Строковый тип данных позволяет хранить строки переменной длины, причем длину можно менять в процессе выполнения программы. Строковый тип представляет операторы, выполняющие такие операции над строками, как конкатенация, присваивание, замещение и др. Для того, чтобы можно было создавать строковую переменную, необходимо подключить описание этого типа данных из стандартной библиотеки. #include <iostream> #include <string> using namespaсe std; void main() { string name="Vitaly"; // объявление, определение, инициализация string lastname="Domnenko"; name+="M."+lastname; // конкатенация с присваиванием (накапливающее присваивание) cout<<"My name is "<<name<<endl; // вывод } Используя [ ] можно получить символ из любой позиции char ch=name[5]; // символы нумеруются с нуля Лексикографическое сравнение осуществляется с использованием операторов == < <= > >= !=. При лексикографическом сравнении последовательно сравниваются коды символов строки. Те символы считаются "больше", чьи коды "больше"и наоборот. Кодировка (кодовая таблица) - это однозначное соответствие между целым число (кодом) и символом. При этом символ - это буква, цифра и другие графические знаки. Кодировки обычно составляют так, что символы следуют в алфавитном порядке и символ 'а' имеет наименьший код, а символ 'z' наибольший. Таким образом, выполняя лексикографическое сравнение можно
  • 2. Лекция №7 для дисциплин: «Прикладное программирование» и «Языки программирования» 2 разместить слова (строки) в алфавитном порядке. Это справедливо и для символов кириллического алфавита. Но не всегда, т.к. существует кодировки, в которой кириллические символы располагаются не в алфавитном порядке. Это кодировка КОИ8, которая обычно используется в операционных системах UNIX. Если вы пишете программу для UNIX, то нужно помнить, что простое лексикографическое сравнение не даст ожидаемого результата и нужно усложнять программу. В нашем случае (при программировании для DOS или Windows) используются кодировки CP866 и СP1251 лексикографическое сравнение справедливо и дает нужный результат. Ну и операторы для ввода/вывода строковых переменных >> << работают также как и для переменных других типов. Функция Описание Конструкторы string() конструктор по умолчанию, создает пустую строку string(const char* p) преобразующий конструктор string(const string& str, size t pos=0, size t n=npos) копирующий конструктор (npos обычно равен -1 и указывает, что память не была выделена) string(const char* p, size_t n) копирует n символов, р является базовым адресом string(char c, size t n=l) создает строку из n символов с Перегруженные операторы string& operator= (const string& s) оператор присваивания string& operator+= (const string& s) добавляет строку char operator[] (size t pos) const возвращает символ из позиции pos char& operator[] (size t pos) возвращает ссылку на символ из позиции pos Функции-члены string& append(const string& Добавляет n символов начиная от позиции pos
  • 3. Лекция №7 для дисциплин: «Прикладное программирование» и «Языки программирования» 3 s, size_t pos=0, size t n=npos); string& assign(const string& s, size_t pos=0, size_t n=npos); строковому объекту присваивается n символов, начиная от позиции pos string& insert(size_t posl, const string& str, size_t pos2=0 , size_t n=npos); вставляет n символов, полученных из str, начиная с позиции pos2, в строку с позиции posl string& remove(size_t pos=0 , size_t n=npos); Удаляются n символов из строки начиная с позиции pos string& replace(posl, nl, str, pos2=0, n2=npos); в неявной строке начиная с позиции posl заменяет nl символов n2 символами из подстроки str с позиции pos2 string& replace(pos, n, p, n2); заменяет n символов в позиции pos используя char* p из n2 символов или char* p до завершающего нуля, или повторяя символ с rep раз char get_at (pos) const; возвращает символ из позиции pos void put_at (pos, c); помещает символ с в позицию pos size_t length() const; возвращает длину строки const char* c_str() const; преобразует строку в традиционное char* представление const char* data() const; возвращает базовый адрес строкового представления void resize(n, c); void resize(n); изменяет строку, делая ее длину равной п; в первой функции в качестве заполняющего символа выступает с, а во второй - символ eos () (end-of-string, конец строки) void reserve(size_t res_arg);size_t reserve() const; выделяет память под строку; первая функция переустанавливает this; вторая возвращает закрытый член res - размер выделенного фрагмента size_t copy(p, n, pos=0) const; п симолов строки, начиная с позиции pos, копируются в char* p string substr(pos=0, n=pos) const; возвращается подстрока из п символов строки
  • 4. Лекция №7 для дисциплин: «Прикладное программирование» и «Языки программирования» 4 int compare(const string& str, size_t pos=0, size_t n=npos) const; сравнивает п символов строки, начиная с позиции pos, со строкой str. Возвращается ноль, если строки равны; в противном случае возвращается положительное или отрицательное целое значение, показывающее, что неявная строка лексикографически больше или меньше чем строка str. size_t find (const string& str, size_t pos=0) const; в строке начиная с позиции pos производится поиск строки str. Если она найдена, возвращается позиция, в которой она начинается; в противном случае возвращается позиция npos size_t rfind(str, pos=npos) const; похоже на find (), но при поиске первого совпадения строка сканируется в обратном направлении size_t find_first_of(str, pos=0) const; производится поиск первого вхождения str начиная с позиции pos size_t find_last_of(str, pos=npos) const; аналогично, но в обратном направлении size_t find_first_not_of(str, pos=0) const; производится поиск первого символа, который не соответствует ни одному из символов str начиная с позиции pos size_t find_last_not_of(str, pos=npos) const; аналогично, но в обратном направлении 2.4 Математические функции #include <cmath> using namespace std; Функция Возвращаемое значения double atof(const char* string) вещественное число, заданное массивом символов string int atoi(const char* string) целое число, заданное массивом символов string int abs(int n) абсолютное значение (модуль) целочисленного аргумента n double acos(double x) арккосинус х в пределах -1.0 до 1.0 double asin(double x) арксинус х в пределах -1.0 до 1.0
  • 5. Лекция №7 для дисциплин: «Прикладное программирование» и «Языки программирования» 5 double atan(double x) арктангенс х в пределах до double atan2(double x, double y) арктангенс х/у в пределах до double ceil(double x) наименьшее целое большее или равное х double cos(double x) косинус х double exp(double x) double fabs(double x) абсолютное значение (модуль) вещественного числа х double floor(double x) наибольшее целое большее или равное х double fmod(double x, double y) остаток от деления х на у double hypot(double x, double y) длина гипотенузы при заданных катетах х и у double log(double x) натуральный логарифм х double log10(double x) десятичный логарифм х double pow(double x, double y) х в степени у double sin(double x) синус х double sqrt(double x) double tan(double x) тангенс х #include <cstdlib> using namespace std; Функция Возвращаемое значения int rand() псевдослучайное число в диапазоне от 0 до RAND_MAX void srand(unsigned int seed) устанавливает стартовую точку для генерации случайных чисел #include <ctime> using namespace std;
  • 6. Лекция №7 для дисциплин: «Прикладное программирование» и «Языки программирования» 6 Функция Возвращаемое значения clock_t clock() процессорное время double difftime(time_t timerl, time_t timer2) разность между двумя временными значениями time_t time(time_t* timer) системное время