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

PPT
тема множество для загрузки 2013
AliyaAringazinova
 
PPT
07 string
pogromskaya
 
PPTX
Функции в языках программирования
kvlar
 
PPTX
Ruby and Ruby on Rails
iQSpace
 
PPT
строковые величины
metodkopilka
 
PPTX
Переменные в языке Delphi
Nexa50
 
PPT
лекции спрг 6_семестр (1)
djbelyakk
 
PPTX
элементы языка и типы данных
Елена Ключева
 
тема множество для загрузки 2013
AliyaAringazinova
 
07 string
pogromskaya
 
Функции в языках программирования
kvlar
 
Ruby and Ruby on Rails
iQSpace
 
строковые величины
metodkopilka
 
Переменные в языке Delphi
Nexa50
 
лекции спрг 6_семестр (1)
djbelyakk
 
элементы языка и типы данных
Елена Ключева
 

What's hot (19)

ODP
C language. Introduction
Alexey Bovanenko
 
PPT
Massivi 11(urok 1)
toniberd
 
PPTX
указатель на указатель 1
Aleksandr Pavlenko
 
ODP
Dynamic memory
Alexey Bovanenko
 
PPT
практика 7
student_kai
 
PPT
Презентация. Основы Pascal
Evgen67
 
PPTX
паскаль язык структурного программирования
Елена Ключева
 
PPT
Java. Логические операторы, операторы ветвления.
Unguryan Vitaliy
 
PPT
Automated NP-completeness proof for 2D problems
Mikhail Dvorkin
 
PDF
язык работы с КМАС (Yafoll сообщение 1)
Alex Shkotin
 
PPT
лабораторная работа №2
Zhanna Kazakova
 
DOC
03
JIuc
 
PPT
Java. Cистемы счислния, битовые операции
Unguryan Vitaliy
 
PPT
10кл общие сведения о языке программирования паскаль
Anna_Malina
 
PDF
Тодуа. Методы разработки интерпретатора языка Рефал-2
Спецсеминар "Искусственный Интеллект" кафедры АЯ ВМК МГУ
 
PPT
8 3-1
natanikonenko19
 
PDF
Внешние языки DSL на funcparserlib
Andrey Vlasovskikh
 
DOCX
сбор урока
LIANA180
 
C language. Introduction
Alexey Bovanenko
 
Massivi 11(urok 1)
toniberd
 
указатель на указатель 1
Aleksandr Pavlenko
 
Dynamic memory
Alexey Bovanenko
 
практика 7
student_kai
 
Презентация. Основы Pascal
Evgen67
 
паскаль язык структурного программирования
Елена Ключева
 
Java. Логические операторы, операторы ветвления.
Unguryan Vitaliy
 
Automated NP-completeness proof for 2D problems
Mikhail Dvorkin
 
язык работы с КМАС (Yafoll сообщение 1)
Alex Shkotin
 
лабораторная работа №2
Zhanna Kazakova
 
03
JIuc
 
Java. Cистемы счислния, битовые операции
Unguryan Vitaliy
 
10кл общие сведения о языке программирования паскаль
Anna_Malina
 
Тодуа. Методы разработки интерпретатора языка Рефал-2
Спецсеминар "Искусственный Интеллект" кафедры АЯ ВМК МГУ
 
Внешние языки DSL на funcparserlib
Andrey Vlasovskikh
 
сбор урока
LIANA180
 
Ad

Viewers also liked (7)

PPTX
TallyJS #1 - Intro to AngularJS
Andrew Hart
 
PDF
Client Side MVC & Angular
Alexe Bogdan
 
PDF
Javascript Client & Server Architectures
Pedro Melo Pereira
 
PDF
Client side scripting
Eleonora Ciceri
 
PPTX
Apresentação angular js
Raphael Ramos Monteiro
 
PPTX
ORM을 활용할 경우의 설계, 개발 과정
Javajigi Jaesung
 
PDF
JavaScript 프레임워크 살펴보기
항희 이
 
TallyJS #1 - Intro to AngularJS
Andrew Hart
 
Client Side MVC & Angular
Alexe Bogdan
 
Javascript Client & Server Architectures
Pedro Melo Pereira
 
Client side scripting
Eleonora Ciceri
 
Apresentação angular js
Raphael Ramos Monteiro
 
ORM을 활용할 경우의 설계, 개발 과정
Javajigi Jaesung
 
JavaScript 프레임워크 살펴보기
항희 이
 
Ad

Similar to лек7 (20)

PDF
C++ Базовый. Занятие 12.
Igor Shkulipa
 
PDF
Step cpp0201
Evgenij Laktionov
 
PPT
C++ tema 1
krisT7
 
PPT
символы и строки
tabargina_gv
 
PDF
ОПК № 3 – Машинное представление целых чисел, символов, строк
Vladimir Parfinenko
 
PPTX
C++ осень 2012 лекция 11
Technopark
 
PDF
Data types. Variables
Ihor Porotikov
 
PPT
Конвертация строковых данных в числовые
Alexey Bovanenko
 
PDF
Введение в синтаксис C++, часть 1
DEVTYPE
 
PDF
Введение в синтаксис C++, часть 2
DEVTYPE
 
PPTX
Cpp/cli particularities
mcroitor
 
PPTX
массивы.строки
dasha2012
 
PDF
Типы данных (продолжение). Операторы. Стандартные библиотеки
Ihor Porotikov
 
PDF
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Sergey Platonov
 
PPTX
модуль 03 строки
Yevgeniy Gertsen
 
ODP
Classes: Number, String, StringBuffer, StringBuilder
Alexey Bovanenko
 
PDF
C++ Базовый. Занятие 02.
Igor Shkulipa
 
PDF
Основы С++ (массивы, указатели). Задачи с массивами
Olga Maksimenkova
 
PPT
символьный тип данных
Элла Якубейко
 
C++ Базовый. Занятие 12.
Igor Shkulipa
 
Step cpp0201
Evgenij Laktionov
 
C++ tema 1
krisT7
 
символы и строки
tabargina_gv
 
ОПК № 3 – Машинное представление целых чисел, символов, строк
Vladimir Parfinenko
 
C++ осень 2012 лекция 11
Technopark
 
Data types. Variables
Ihor Porotikov
 
Конвертация строковых данных в числовые
Alexey Bovanenko
 
Введение в синтаксис C++, часть 1
DEVTYPE
 
Введение в синтаксис C++, часть 2
DEVTYPE
 
Cpp/cli particularities
mcroitor
 
массивы.строки
dasha2012
 
Типы данных (продолжение). Операторы. Стандартные библиотеки
Ihor Porotikov
 
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Sergey Platonov
 
модуль 03 строки
Yevgeniy Gertsen
 
Classes: Number, String, StringBuffer, StringBuilder
Alexey Bovanenko
 
C++ Базовый. Занятие 02.
Igor Shkulipa
 
Основы С++ (массивы, указатели). Задачи с массивами
Olga Maksimenkova
 
символьный тип данных
Элла Якубейко
 

More from Anastasia Snegina (20)

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

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