Классы String, Fstream. Тема 9

Содержание

Слайд 2

КЛАСС STRING

КЛАСС STRING

Слайд 3

В С++ существует два типа строк:

1. char s[10]; // массив символов

Переменная хранит

В С++ существует два типа строк: 1. char s[10]; // массив символов
в себе только 1 символ, элементы массива – отдельные объекты, сложно работать со строками переменной длины

2. string s; // символьная строка

Это специальный класс string
Для его подключения в начале программы нужно подключить :
#include

Слайд 4

Символьные строки

Начальное значение:

string s = "Привет!";

Вывод на экран:

cout << s;

s = "Привет!";

Присваивание:

Символьные строки Начальное значение: string s = "Привет!"; Вывод на экран: cout s = "Привет!"; Присваивание:

Слайд 5

Символьные строки

Ввод с клавиатуры:

cin >> s;

Отдельный символ:

s[4] = 'a';

Длина строки:

только до пробела!

getline

Символьные строки Ввод с клавиатуры: cin >> s; Отдельный символ: s[4] =
( cin, s );

до перевода строки (Enter)

int n;
...
n = s.size();

метод для объектов типа string

Слайд 6

Символьные строки

#include
using namespace std;
int main()
{
setlocale(0,"rus");
string s;
cout << "Введите строку:

Символьные строки #include using namespace std; int main() { setlocale(0,"rus"); string s;
";
getline ( cin, s );
for (int i = 0; i < s.size(); i++ )
if ( s[i] == ‘a’ )
s[i] = ‘b’;
cout << s;
}

Задача: заменить в строке все буквы 'а' на буквы 'б'.

цикл по всем символам строки

Слайд 7

Операции со строками

Операции со строками

Слайд 8

Операции со строками

Операции со строками

Слайд 9

s = "0123456789";
s1 = s.substr( 3 ); // "3456789"

Операции со строками

Объединение (конкатенация):

string

s = "0123456789"; s1 = s.substr( 3 ); // "3456789" Операции со
s, s1, s2;
s1 = "Привет";
s2 = "Вася";
s = s1 + ", " + s2 + "!";

"Привет, Вася!"

Срез (подстрока):

s = "0123456789";
s1 = s.substr( 3, 5 ); // «23456"

с какого символа

откуда

5

Слайд 10

Операции со строками

Вставка:

s = "0123456789";
s.insert( 3,"ABC" ); // "012ABC3456789"

куда

с какого символа

Удаление:

s =

Операции со строками Вставка: s = "0123456789"; s.insert( 3,"ABC" ); // "012ABC3456789"
"0123456789";
s.erase ( 3, 6 ); // "0129"

с какого символа

сколько символов

что

Слайд 11

Поиск символа в строке

string s = "Здесь был Вася.";
int n;
n = s.find

Поиск символа в строке string s = "Здесь был Вася."; int n;
( 'с' ); // 3

find – искать

if ( n >= 0 )
cout << "Номер символа 'c': "
<< n << endl;
else cout << "Символ не найден.\n";

Слайд 12

Поиск подстроки

string s = "Здесь был Вася.";
int n;
n = s.find ( "Вася"

Поиск подстроки string s = "Здесь был Вася."; int n; n =
); // 10

if ( n >= 0 )
cout << "Слово начинается с s["
<< n << "]\n";
else
cout << "Слово не найдено.\n";

Слайд 13

Пример обработки строк

Задача: Ввести имя, отчество и фамилию. Преобразовать их к формату

Пример обработки строк Задача: Ввести имя, отчество и фамилию. Преобразовать их к
«фамилия-инициалы».
Пример:
Введите имя, отчество и фамилию:
Василий Алибабаевич Хрюндиков
Результат:
Хрюндиков В.А.

Алгоритм:
найти первый пробел и выделить имя
удалить имя с пробелом из основной строки
найти первый пробел и выделить отчество
удалить отчество с пробелом из основной строки
«сцепить» фамилию, первые буквы имени и фамилии, точки, пробелы…

Алибабаевич Хрюндиков

Хрюндиков

Хрюндиков В.А.

Слайд 14

Пример обработки строк

main()
{
string s, name, name2;
int n;
cout << "Введите

Пример обработки строк main() { string s, name, name2; int n; cout
имя, отчество и фамилию: ";
//Татьяна Степановна Лапшун
getline ( cin, s );
name = s.substr(0,1) + '.';// начало имени - Т.
n = s.find(' '); // найти пробел - 7
s = s.substr( n+1 ); // удалить имя - Степановна Лапшун
n = s.find(' '); // найти пробел - 10
name2 = s.substr(0,1) + '.';// начало отчества - С.
s = s.substr ( n+1 ); // осталась фамилия - Лапшун
s = s + ' ' + name + name2; // результат = Лапшун Т. С.
cout << s;
}

Слайд 15

Задачи

1: Ввести адрес файла и «разобрать» его на части, разделенные знаком '/'.

Задачи 1: Ввести адрес файла и «разобрать» его на части, разделенные знаком
Каждую часть вывести в отдельной строке.
Пример:
Введите адрес файла:C:/Фото/2013/Поход/vasya.jpg
C:
Фото
2013
Поход
vasya.jpg

2: Напишите программу, которая заменяет во всей строке одну последовательность символов на другую.
Пример: Введите строку: (X > 0) and (Y < X) and (Z > Y) and (Z<>5)
Что меняем: and
Чем заменить: &&
Результат
(X > 0) && (Y < X) && (Z > Y) && (Z<>5)

Слайд 16

Преобразования «строка» – «число»

Из строки в число:

string s = "123";
int N;
N

Преобразования «строка» – «число» Из строки в число: string s = "123";
= atoi ( s.c_str() ); // N = 123

string s = "123.456";
float X;
X = atof ( s.c_str() ); // X = 123.456

«12x3» → 12

в строку языка Си

Слайд 17

Преобразования «строка» – «число»

Из числа в строку:

ostringstream ss;
string s;
int N =

Преобразования «строка» – «число» Из числа в строку: ostringstream ss; string s;
123;
ss << N;
s = ss.str(); // s = "123"

#include

строковый поток вывода

из потока в строку

строковые потоки

Слайд 18

Преобразования «строка» – «число»

Вещественное число в строку:

ostringstream ss;
string s;
double X =

Преобразования «строка» – «число» Вещественное число в строку: ostringstream ss; string s;
123.456;
ss.width(10); // ширина поля
ss.precision(3); // знаков в дробной части
ss << X;
s = ss.str(); // s =" 123.456"

ss.str(""); // очистка потока
ss.width(10); // ширина поля
ss.precision(6); // знаков в дробной части
ss << scientific << X; // научный формат
s = ss.str(); // s = "1.234560E+002"

Научный формат:

Слайд 19

Задачи

«A»: Напишите программу, которая вычисляет сумму трех чисел, введенную в форме символьной

Задачи «A»: Напишите программу, которая вычисляет сумму трех чисел, введенную в форме
строки. Все числа целые.
Пример:
Введите выражение:
12+3+45
Ответ: 60

«B»: Напишите программу, которая вычисляет выражение, состоящее из трех чисел и двух знаков (допускаются только знаки «+» или «–»). Выражение вводится как символьная строка, все числа целые.
Пример:
Введите выражение:
12-3+45
Ответ: 54

Слайд 20

КЛАСС FSTREAM

КЛАСС FSTREAM

Слайд 21

1. Открытие и закрытие файла

Для выполнения операций ввода-вывода над файлами необходимо включить

1. Открытие и закрытие файла Для выполнения операций ввода-вывода над файлами необходимо
в программу заголовок:
#include
В C++ ввод-вывод осуществляется посредством логического интерфейса, называемого потоком.
Потоки связываются с различными устройствами ввода-вывода, но имеют один и тот же программный интерфейс.
Существуют три типа потоков:
ввода ( класс ifstream ),
вывода ( класс ofstream ) и
ввода – вывода ( класс fstream ).
Пример создания потоков
(имена потоков задаются программистом):
ifstream in; // in - поток ввода/чтение
ofstream out; // out - поток вывода/запись
fstream both; // both - поток ввода-вывода

Слайд 22

Созданный поток необходимо связать с файлом с помощью функции open( ).
Примеры:
in.open( "input.txt" );

Созданный поток необходимо связать с файлом с помощью функции open( ). Примеры:
// для ввода
out.open( "output.txt" ); // для вывода
both.open( "inout.txt" ); // для ввода-вывода
Можно совместить описание потоков с операцией связывания с файлом (обычно так и записывают):
ifstream in( "input.txt" ); // для ввода
ofstream out( "output.txt" ); // для вывода
fstream both ("inout.txt" ); // для ввода-вывода

Слайд 23

Если функция open( ) завершилась неудачно, то поток имеет значение false.
Поэтому можно

Если функция open( ) завершилась неудачно, то поток имеет значение false. Поэтому
проконтролировать успешность открытия файла:
if( !inp )
cout << "Нет файла\n";
else
cout << "Файл открыт\n";
Для закрытия файла используется функция close( ).
inp.close( ); // закрытие файла
out.close( ); // закрытие файла

Слайд 24

Запись данных в файл:
#include
#include
using namespace std;
int main( )
{
setlocale(0, "");
double q

Запись данных в файл: #include #include using namespace std; int main( )
= 1.23e-25, p = 45.6;
char ch = 'Z' ;
char str[20] = "Строка";
int i = 789;
ofstream out("output.txt"); // создание и открытие файла для записи
if(!out) // проверка успешности открытия файла
{cout << "Нет файла"; return 1;}
out << q << '\n' << p << '\n' << ch << " " << str << " " << i; // запись данных в файл
out.close( ); // закрытие файла
return 0;
}
В результате в файл output.txt будет записано:

Дополнение информации в файл
// открытие файла для дополнения
ofstream out("output.txt", ios::app);

Модификатор ate сохраняет содержимое файла, если он существует, и устанавливает указатель в конец файла при открытии; app - то же самое, с той лишь разницей, что устанавливает указатель в конец файла перед каждой записью в файл (т.е. записывать можно только в конец файла).

1.23e-25
45.6
Z Строка 789

Слайд 25

Режимы открытия

Режимы открытия файлов можно устанавливать непосредственно при создании объекта или при

Режимы открытия Режимы открытия файлов можно устанавливать непосредственно при создании объекта или
вызове метода open().
ofstream fout("file.txt", ios::app);
fout.open("file.txt", ios::app);
Режимы открытия файлов можно комбинировать с помощью поразрядной логической операции ИЛИ |, например:
ios::out | ios::in - открытие файла для записи и чтения.

Слайд 26

Чтение данных из файла:
#include
#include
using namespace std;
int main( )
{
setlocale(0, "");
double q,

Чтение данных из файла: #include #include using namespace std; int main( )
p;
char ch ; char str[20]; int i;
ifstream inp("Input.txt"); // открытие файла для чтения
if(!inp) // проверка успешности открытия файла
{ cout << "Нет файла"; return 1;}
inp >> q >> p >> ch >> str >> i; // ввод информации из файла
inp.close( ); // закрытие файла
// вывод данных на экран для контроля
cout << " q=" << q << " p =" << p << " ch = " << ch
<< " str = " << str << " i = " << i <return 0;
}

1.23e-25
45.6
Z Строка 789

Слайд 27

Чтение текста вместе пробелами:
Если строка читается с помощью операции >> , то

Чтение текста вместе пробелами: Если строка читается с помощью операции >> ,
чтение прекращается на первом пробеле.
Чтение строк с пробелами осуществляется функцией:
getline(имя_потока, строковая_переменная)
#include #include #include
using namespace std;
int main( )
{
setlocale(0,"");
string str;
ifstream inp("Input.txt"); // открытие файла для чтения
if(!inp) cout << "Нет файла";
getline(inp, str); // ввод информации из файла
inp.close( ); // закрытие файла
// вывод данных на экран для контроля
cout << " str = \n" << str < return 0;
}
Если в файле записано: «первый второй третий четвертый пятый» то будет выведено:

Слайд 28

Обнаружение конца файла:
используется функция логического типа eof( )
Функция возвращает true, если считан

Обнаружение конца файла: используется функция логического типа eof( ) Функция возвращает true,
символ окончания файла,
и false в противном случае.