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

Содержание

Слайд 2

В С++ существует два типа строк: 1. char s[10]; // массив

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

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

Переменная

хранит в себе только 1 символ, элементы массива – отдельные объекты, сложно работать со строками переменной длины

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

строка

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

Слайд 3

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

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

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

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

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

cout << s;

s =

"Привет!";

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

Слайд 4

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

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

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

cin >> s;

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

s[4] = 'a';

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

только до

пробела!

getline ( cin, s );

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

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

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

Слайд 5

Символьные строки #include using namespace std; main() { setlocale(0,"rus"); string s;

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

#include
using namespace std;
main()
{
setlocale(0,"rus");
string s;
int i;
cout

<< "Введите строку: ";
getline ( cin, s );
for ( i = 0; i < s.size(); i++ )
if ( s[i] == ‘a’ )
s[i] = ‘b';
cout << s;
}

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

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

Слайд 6

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

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

Слайд 7

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

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

Слайд 8

s = "0123456789"; s1 = s.substr( 3 ); // "3456789" Операции

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

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

Объединение

(конкатенация):

string s, s1, s2;
s1 = "Привет";
s2 = "Вася";
s = s1 + ", " + s2 + "!";

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

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

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

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

откуда

5

Слайд 9

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

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

Вставка:

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

что

куда

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

Удаление:

s

= "0123456789";
s.erase ( 3, 6 ); // "0129"

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

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

Слайд 10

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

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

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

s.find ( 'с' ); // 3

find – искать

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

Слайд 11

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

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

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

"Вася" ); // 10

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

Слайд 12

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

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

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

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

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

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

Хрюндиков

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

Слайд 13

Пример обработки строк main() { string s, name, name2; int n;

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

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

Задачи «A»: Ввести с клавиатуры в одну строку фамилию, имя и

Задачи

«A»: Ввести с клавиатуры в одну строку фамилию, имя и отчество,

разделив их пробелом. Вывести фамилию и инициалы.
Пример:
Введите фамилию, имя и отчество:
Иванов Петр Семёнович
П.С. Иванов
Слайд 15

Задачи «B»: Ввести адрес файла и «разобрать» его на части, разделенные

Задачи

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

'/'. Каждую часть вывести в отдельной строке.
Пример:
Введите адрес файла:
C:/Фото/2013/Поход/vasya.jpg
C:
Фото
2013
Поход
vasya.jpg
Слайд 16

Задачи «C»: Напишите программу, которая заменяет во всей строке одну последовательность

Задачи

«C»: Напишите программу, которая заменяет во всей строке одну последовательность символов

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

Преобразования «строка» – «число» Из строки в число: string s =

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

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

string s = "123";
int

N;
N = atoi ( s.c_str() ); // N = 123

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

«12x3» → 12

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

Слайд 18

Преобразования «строка» – «число» Из числа в строку: ostringstream ss; string

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

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

ostringstream ss;
string s;
int N

= 123;
ss << N;
s = ss.str(); // s = "123"

#include

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

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

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

Слайд 19

Преобразования «строка» – «число» Вещественное число в строку: ostringstream ss; string

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

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

ostringstream ss;
string s;
double X

= 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"

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

Слайд 20

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

Задачи

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

символьной строки. Все числа целые.
Пример:
Введите выражение:
12+3+45
Ответ: 60

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

Слайд 21

Задачи «C»: Напишите программу, которая вычисляет выражение, состоящее из трех чисел

Задачи

«C»: Напишите программу, которая вычисляет выражение, состоящее из трех чисел и

двух знаков (допускаются знаки «+», «–», «*» и «/»). Выражение вводится как символьная строка, все числа целые. Операция «/» выполняется как целочисленное деление (div).
Пример:
Введите выражение:
12*3+45
Ответ: 81