Символьные строки. Программирование на языке C++

Содержание

Слайд 2

Зачем нужны символьные строки?

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

элементы массива – отдельные объекты
сложно

Зачем нужны символьные строки? char s[10]; // массив символов элементы массива –
работать со строками переменной длины

Хочется:
строка – единый объект
длина строки может меняться во время работы программы

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

строка

Слайд 3

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

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

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

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

cout << s;

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

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

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

Слайд 4

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

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

cin >> s;

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

s[4] = 'a';

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

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

getline

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

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

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

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

Слайд 5

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

#include
using namespace std;
main()
{
string s;
int i;
cout << "Введите

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

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

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

Слайд 6

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

#include
using namespace std;
main()
{
string s;
char sym;
cout << "Введите

Символьные строки #include using namespace std; main() { string s; char sym;
строку: ";
getline ( cin, s );
for (char& sym: s)
if ( sym == 'a' )
sym = 'b';
cout << s;
}

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

Слайд 7

Задачи

На сайте https://informatics.msk.ru/ из Авторского курса: «Задачи из учебника К.Ю. Полякова и

Задачи На сайте https://informatics.msk.ru/ из Авторского курса: «Задачи из учебника К.Ю. Полякова
Е.А. Еремина». Тема 1 сделать:
Задачи к § 66 «Символьные строки»: задачи под буквами A, B, C.

Слайд 8

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 ); // "34567"

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

откуда

5

Слайд 9

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

Вставка:

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

что

куда

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

Удаление:

s =

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

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

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

Слайд 10

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

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

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

find – искать

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

Слайд 11

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

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

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

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

Слайд 12

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

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

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

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

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

Хрюндиков

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

Слайд 13

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

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(' '); // найти пробел
s = s.substr ( n+1 ); // удалить имя
n = s.find(' '); // найти пробел
name2 = s.substr(0,1) + '.';// начало отчества
s = s.substr ( n+1 ); // осталась фамилия
s = s + ' ' + name + name2; // результат
cout << s;
}

Слайд 14

Задачи

На сайте https://informatics.msk.ru/ из Авторского курса: «Задачи из учебника К.Ю. Полякова и

Задачи На сайте https://informatics.msk.ru/ из Авторского курса: «Задачи из учебника К.Ю. Полякова
Е.А. Еремина». Тема 1 сделать:
1. Задачи к § 66 «Символьные строки»»: задачи под буквами K, L.

Слайд 15

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

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

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

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

#include

stoi(s)

С 11 версии С++ без преобразования в строку языка Си используют функции:

stof(s)

Слайд 16

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

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

ostringstream ss;
string s;
int N =

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

#include

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

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

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

ss.str(""); // очистка потока

Слайд 17

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

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

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"

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

#include

Слайд 18

Замена

Метод replace:

string date = "12/02/2020";
date.replace(2, 1, ".“); // "12.02/2020" date.replace(5, 1,

Замена Метод replace: string date = "12/02/2020"; date.replace(2, 1, ".“); // "12.02/2020"
"."); // "12.02.2020"

string filename = "example.com";
int pos = filename.find(".");
filename.replace(0, pos, "spam");// "spam.com"