Программирование на языке C++

Содержание

Слайд 2

Программирование на языке C++

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

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

Слайд 3

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

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

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

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

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

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

строка

Слайд 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;
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] == 'а' )
s[i] = 'б';
cout << s;
}

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

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

Слайд 7

Задачи

«A»: Ввести с клавиатуры символьную строку и заменить в ней все буквы

Задачи «A»: Ввести с клавиатуры символьную строку и заменить в ней все
«а» на «б» и все буквы «б» на «а» (заглавные на заглавные, строчные на строчные).
Пример:
Введите строку:
ааббААББссСС
Результат:
ббааББААссСС

Слайд 8

Задачи

«B»: Ввести с клавиатуры символьную строку и определить, сколько в ней слов.

Задачи «B»: Ввести с клавиатуры символьную строку и определить, сколько в ней
Словом считается последовательности непробельных символов, отделенная с двух сторон пробелами (или стоящая с краю строки). Слова могут быть разделены несколькими пробелами, в начале и в конце строки тоже могут быть пробелы.
Пример:
Введите строку:
Вася пошел гулять
Найдено слов: 3

Слайд 9

Задачи

«C»: Ввести с клавиатуры символьную строку и найдите самое длинное слово и

Задачи «C»: Ввести с клавиатуры символьную строку и найдите самое длинное слово
его длину. Словом считается последовательности непробельных символов, отделенная с двух сторон пробелами (или стоящая с краю строки). Слова могут быть разделены несколькими пробелами, в начале и в конце строки тоже могут быть пробелы.
Пример:
Введите строку:
Вася пошел гулять
Самое длинное слово: гулять, длина 6

Слайд 10

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

Слайд 11

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

Вставка:

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

что

куда

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

Удаление:

s =

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

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

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

Слайд 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

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

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

Задачи

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

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

Слайд 18

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

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

ostringstream ss;
string s;
int N =

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

#include

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

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

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

Слайд 19

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

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

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"

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

Слайд 20

Задачи

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

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

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

Слайд 21

Задачи

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

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