SlideShare a Scribd company logo
Лекция №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
указатель на указатель 1
Aleksandr 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 problems
Mikhail 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
 
8 3-1
8 3-18 3-1
Внешние языки DSL на funcparserlib
Внешние языки DSL на funcparserlibВнешние языки DSL на funcparserlib
Внешние языки DSL на funcparserlib
Andrey 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

Predzazhita 2009 v16
Predzazhita 2009 v16Predzazhita 2009 v16
Predzazhita 2009 v16guest1ba51d
 
Дмитрий Прокопцев — R-ссылки в С++11
Дмитрий Прокопцев — R-ссылки в С++11Дмитрий Прокопцев — R-ссылки в С++11
Дмитрий Прокопцев — R-ссылки в С++11
Yandex
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6Technopark
 
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...Ontico
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++
mcroitor
 
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Yandex
 
iOS-07_2 Multithreading
iOS-07_2 MultithreadingiOS-07_2 Multithreading
iOS-07_2 Multithreading
Noveo
 
file handling in c
file handling in cfile handling in c
file handling in c
Maxim Shaptala
 
CiklumCPPSat: Eugene Kulak "Stackless/stackfull coroutines and boost.asio"
CiklumCPPSat: Eugene Kulak "Stackless/stackfull coroutines and boost.asio"CiklumCPPSat: Eugene Kulak "Stackless/stackfull coroutines and boost.asio"
CiklumCPPSat: Eugene Kulak "Stackless/stackfull coroutines and boost.asio"
Ciklum Ukraine
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
a15464321646213
 
Python и Cython
Python и CythonPython и Cython
Python и Cython
Alexander Shigin
 
Лекция 5: Многопоточное программирование: часть 1 (Multithreading programming...
Лекция 5: Многопоточное программирование: часть 1 (Multithreading programming...Лекция 5: Многопоточное программирование: часть 1 (Multithreading programming...
Лекция 5: Многопоточное программирование: часть 1 (Multithreading programming...Mikhail Kurnosov
 
C++ осень 2013 лекция 2
C++ осень 2013 лекция 2C++ осень 2013 лекция 2
C++ осень 2013 лекция 2Technopark
 
Григорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммыГригорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммы
Yandex
 
Разработка приложений для облаков / Андрей Кожокару (EPAM)
Разработка приложений для облаков / Андрей Кожокару (EPAM)Разработка приложений для облаков / Андрей Кожокару (EPAM)
Разработка приложений для облаков / Андрей Кожокару (EPAM)Ontico
 
Андриан Буданцов_Секретные способы идентификации пользователей iOS
Андриан Буданцов_Секретные способы идентификации пользователей iOSАндриан Буданцов_Секретные способы идентификации пользователей iOS
Андриан Буданцов_Секретные способы идентификации пользователей iOS
GeeksLab Odessa
 
Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)
Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)
Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)Mikhail Kurnosov
 
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
Yandex
 
Hienadz Drahun Ui Design At Epam
Hienadz Drahun    Ui Design At EpamHienadz Drahun    Ui Design At Epam
Hienadz Drahun Ui Design At Epamsef2009
 

Viewers also liked (20)

Predzazhita 2009 v16
Predzazhita 2009 v16Predzazhita 2009 v16
Predzazhita 2009 v16
 
Дмитрий Прокопцев — R-ссылки в С++11
Дмитрий Прокопцев — R-ссылки в С++11Дмитрий Прокопцев — R-ссылки в С++11
Дмитрий Прокопцев — R-ссылки в С++11
 
Кратко о Linux
Кратко о LinuxКратко о Linux
Кратко о Linux
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6
 
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++
 
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
 
iOS-07_2 Multithreading
iOS-07_2 MultithreadingiOS-07_2 Multithreading
iOS-07_2 Multithreading
 
file handling in c
file handling in cfile handling in c
file handling in c
 
CiklumCPPSat: Eugene Kulak "Stackless/stackfull coroutines and boost.asio"
CiklumCPPSat: Eugene Kulak "Stackless/stackfull coroutines and boost.asio"CiklumCPPSat: Eugene Kulak "Stackless/stackfull coroutines and boost.asio"
CiklumCPPSat: Eugene Kulak "Stackless/stackfull coroutines and boost.asio"
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
 
Python и Cython
Python и CythonPython и Cython
Python и Cython
 
Лекция 5: Многопоточное программирование: часть 1 (Multithreading programming...
Лекция 5: Многопоточное программирование: часть 1 (Multithreading programming...Лекция 5: Многопоточное программирование: часть 1 (Multithreading programming...
Лекция 5: Многопоточное программирование: часть 1 (Multithreading programming...
 
C++ осень 2013 лекция 2
C++ осень 2013 лекция 2C++ осень 2013 лекция 2
C++ осень 2013 лекция 2
 
Григорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммыГригорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммы
 
Разработка приложений для облаков / Андрей Кожокару (EPAM)
Разработка приложений для облаков / Андрей Кожокару (EPAM)Разработка приложений для облаков / Андрей Кожокару (EPAM)
Разработка приложений для облаков / Андрей Кожокару (EPAM)
 
Андриан Буданцов_Секретные способы идентификации пользователей iOS
Андриан Буданцов_Секретные способы идентификации пользователей iOSАндриан Буданцов_Секретные способы идентификации пользователей iOS
Андриан Буданцов_Секретные способы идентификации пользователей iOS
 
Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)
Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)
Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)
 
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
 
Hienadz Drahun Ui Design At Epam
Hienadz Drahun    Ui Design At EpamHienadz Drahun    Ui Design At Epam
Hienadz Drahun Ui Design At Epam
 

Similar to лек8

C++ Базовый. Занятие 12.
C++ Базовый. Занятие 12.C++ Базовый. Занятие 12.
C++ Базовый. Занятие 12.
Igor Shkulipa
 
Step cpp0201
Step cpp0201Step cpp0201
Step cpp0201
Evgenij Laktionov
 
Java. Строки. Класс String.
Java. Строки. Класс String.Java. Строки. Класс String.
Java. Строки. Класс String.
Unguryan Vitaliy
 
8 3-3
8 3-38 3-3
Программирование линейных алгоритмов
Программирование линейных алгоритмовПрограммирование линейных алгоритмов
Программирование линейных алгоритмов
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
 
PascalABC.NET 2015-2016
PascalABC.NET 2015-2016PascalABC.NET 2015-2016
Язык программирования Паскаль
Язык программирования ПаскальЯзык программирования Паскаль
Язык программирования ПаскальOlgaDask
 
Cpp/cli particularities
Cpp/cli particularitiesCpp/cli particularities
Cpp/cli particularitiesmcroitor
 
модуль 03 строки
модуль 03 строкимодуль 03 строки
модуль 03 строки
Yevgeniy Gertsen
 
Язык программирования Pascal
Язык программирования PascalЯзык программирования Pascal
Язык программирования Pascal
School 242
 
"Модифицируй это!" или "Больше магии Python с помощью изменения AST"
"Модифицируй это!" или "Больше магии Python с помощью изменения AST""Модифицируй это!" или "Больше магии Python с помощью изменения AST"
"Модифицируй это!" или "Больше магии Python с помощью изменения AST"
PyNSK
 

Similar to лек8 (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
 

лек8

  • 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) системное время