Скачать презентацию 1 Программирование на языке C Символьные строки К Скачать презентацию 1 Программирование на языке C Символьные строки К

строки.ppt

  • Количество слайдов: 23

1 Программирование на языке C++ Символьные строки К. Ю. Поляков, Е. А. Ерёмин, 2013 1 Программирование на языке C++ Символьные строки К. Ю. Поляков, Е. А. Ерёмин, 2013 http: //kpolyakov. spb. ru

2 Алгоритмизация и программирование, язык C++, 10 класс Зачем нужны символьные строки? char s[10]; 2 Алгоритмизация и программирование, язык C++, 10 класс Зачем нужны символьные строки? char s[10]; // массив символов § элементы массива – отдельные объекты § сложно работать со строками переменной длины Хочется: • строка – единый объект • длина строки может меняться во время работы программы string s; // символьная строка К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

Алгоритмизация и программирование, язык C++, 10 класс 3 Символьные строки Начальное значение: string s Алгоритмизация и программирование, язык C++, 10 класс 3 Символьные строки Начальное значение: string s = "Привет!"; Присваивание: s = "Привет!"; Вывод на экран: cout << s; ? К. Ю. Поляков, Е. А. Ерёмин, 2014 А если массив? http: //kpolyakov. spb. ru

4 Алгоритмизация и программирование, язык C++, 10 класс Символьные строки Ввод с клавиатуры: cin 4 Алгоритмизация и программирование, язык C++, 10 класс Символьные строки Ввод с клавиатуры: cin >> s; getline ( cin, s ); Отдельный символ: только до пробела! до перевода строки (Enter) s[4] = 'a'; ! Символы в строку нумеруются с нуля! Длина строки: метод для объектов int n; типа string. . . n = s. size(); К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

5 Алгоритмизация и программирование, язык C++, 10 класс Символьные строки Задача: заменить в строке 5 Алгоритмизация и программирование, язык C++, 10 класс Символьные строки Задача: заменить в строке все буквы 'а' на буквы 'б'. #include using namespace std; main() { string s; int i; cout << "Введите строку: "; getline ( cin, s ); for ( i = 0; i < s. size(); i++ ) if ( s[i] == 'а' ) цикл по всем s[i] = 'б'; символам строки cout << s; } К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

6 Алгоритмизация и программирование, язык C++, 10 класс Операции со строками Объединение (конкатенация): string 6 Алгоритмизация и программирование, язык C++, 10 класс Операции со строками Объединение (конкатенация): string s, s 1, s 2; s 1 = "Привет"; "Привет, Вася!" s 2 = "Вася"; s = s 1 + ", " + s 2 + "!"; Срез (подстрока): s = "0123456789"; s 1 = s. substr( 3, 5 ); откуда с какого символа сколько символов s = "0123456789"; s 1 = s. substr( 3 ); К. Ю. Поляков, Е. А. Ерёмин, 2014 // "34567" 5 // "3456789" http: //kpolyakov. spb. ru

7 Алгоритмизация и программирование, язык C++, 10 класс Операции со строками Удаление: s = 7 Алгоритмизация и программирование, язык C++, 10 класс Операции со строками Удаление: s = "0123456789"; s. erase ( 3, 6 ); // "0129" с какого символа сколько символов Вставка: s = "0123456789"; s. insert( 3, "ABC" ); // "012 ABC 3456789" куда с какого символа К. Ю. Поляков, Е. А. Ерёмин, 2014 что http: //kpolyakov. spb. ru

8 Алгоритмизация и программирование, язык C++, 10 класс Поиск символа в строке string s 8 Алгоритмизация и программирование, язык C++, 10 класс Поиск символа в строке string s = "Здесь был Вася. "; int n; n = s. find ( 'с' ); // 3 find – искать ! Вернёт -1, если не нашли! if ( n >= 0 ) cout << "Номер символа 'c': " << n << endl; else cout << "Символ не найден. n"; К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

9 Алгоритмизация и программирование, язык C++, 10 класс Поиск подстроки string s = 9 Алгоритмизация и программирование, язык C++, 10 класс Поиск подстроки string s = "Здесь был Вася. "; int n; n = s. find ( "Вася" ); // 10 if ( n >= 0 cout << << else cout << ! ) "Слово начинается с s[" n << "]n"; "Слово не найдено. n"; s. rfind() – поиск с конца строки! К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

10 Алгоритмизация и программирование, язык C++, 10 класс Преобразования «строка» – «число» Из строки 10 Алгоритмизация и программирование, язык C++, 10 класс Преобразования «строка» – «число» Из строки в число: string s = "123"; int N; N = atoi ( s. c_str() ); « 12 x 3» 12 // N = 123 в строку языка Си string s = "123. 456"; float X; X = atof ( s. c_str() ); К. Ю. Поляков, Е. А. Ерёмин, 2014 // X = 123. 456 http: //kpolyakov. spb. ru

11 Алгоритмизация и программирование, язык C++, 10 класс Преобразования «строка» – «число» Из числа 11 Алгоритмизация и программирование, язык C++, 10 класс Преобразования «строка» – «число» Из числа в строку: ! Идея: направить выходной поток в строку! #include строковые потоки ostringstream ss; строковый поток вывода string s; int N = 123; ss << N; s = ss. str(); // s = "123" из потока в строку К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

12 Алгоритмизация и программирование, язык C++, 10 класс Преобразования «строка» – «число» Вещественное число 12 Алгоритмизация и программирование, язык C++, 10 класс Преобразования «строка» – «число» Вещественное число в строку: 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 s = ss. str(); К. Ю. Поляков, Е. А. Ерёмин, 2014 // // // << // очистка потока ширина поля знаков в дробной части X; // научный формат s = "1. 234560 E+002" http: //kpolyakov. spb. ru

13 Алгоритмизация и программирование, язык C++, 10 класс Пример обработки строк Задача: Ввести имя, 13 Алгоритмизация и программирование, язык C++, 10 класс Пример обработки строк Задача: Ввести имя, отчество и фамилию. Преобразовать их к формату «фамилия-инициалы» . Пример: Введите имя, отчество и фамилию: Василий Алибабаевич Хрюндиков Результат: Хрюндиков В. А. Алибабаевич Хрюндиков Алгоритм: • найти первый пробел и выделить имя Хрюндиков • удалить имя с пробелом из основной строки • найти первый пробел и выделить отчество • удалить отчество с пробелом из основной строки • «сцепить» фамилию, первые буквы имени и фамилии, точки, пробелы… Хрюндиков В. А. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

14 Алгоритмизация и программирование, язык C++, 10 класс Пример обработки строк main() { string 14 Алгоритмизация и программирование, язык C++, 10 класс Пример обработки строк main() { string s, name 2; int n; cout << "Введите имя, отчество и фамилию: "; getline ( cin, s ); name = s. substr(0, 1) + '. '; // начало имени n = s. find(' '); // найти пробел s = s. substr ( n+1 ); // удалить имя n = s. find(' '); // найти пробел name 2 = s. substr(0, 1) + '. '; // начало отчества s = s. substr ( n+1 ); // осталась фамилия s = s + ' ' + name 2; // результат cout << s; } К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

15 Алгоритмизация и программирование, язык C++, 10 класс Задачи « 1» : Ввести с 15 Алгоритмизация и программирование, язык C++, 10 класс Задачи « 1» : Ввести с клавиатуры символьную строку и заменить в ней все буквы «а» на «б» и все буквы «б» на «а» (заглавные на заглавные, строчные на строчные). Пример: Введите строку: аабб. ААББсс. СС Результат: ббаа. ББААсс. СС К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

16 Алгоритмизация и программирование, язык C++, 10 класс Задачи « 2» : Ввести с 16 Алгоритмизация и программирование, язык C++, 10 класс Задачи « 2» : Ввести с клавиатуры символьную строку и определить, сколько в ней слов. Словом считается последовательности непробельных символов, отделенная с двух сторон пробелами (или стоящая с краю строки). Слова могут быть разделены несколькими пробелами, в начале и в конце строки тоже могут быть пробелы. Пример: Введите строку: Вася пошел гулять Найдено слов: 3 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

17 Алгоритмизация и программирование, язык C++, 10 класс Задачи « 3» : Ввести с 17 Алгоритмизация и программирование, язык C++, 10 класс Задачи « 3» : Ввести с клавиатуры символьную строку и найдите самое длинное слово и его длину. Словом считается последовательности непробельных символов, отделенная с двух сторон пробелами (или стоящая с краю строки). Слова могут быть разделены несколькими пробелами, в начале и в конце строки тоже могут быть пробелы. Пример: Введите строку: Вася пошел гулять Самое длинное слово: гулять, длина 6 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

18 Алгоритмизация и программирование, язык C++, 10 класс Задачи « 4» : Ввести с 18 Алгоритмизация и программирование, язык C++, 10 класс Задачи « 4» : Ввести с клавиатуры в одну строку фамилию, имя и отчество, разделив их пробелом. Вывести фамилию и инициалы. Пример: Введите фамилию, имя и отчество: Иванов Петр Семёнович П. С. Иванов К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

19 Алгоритмизация и программирование, язык C++, 10 класс Задачи « 5» : Ввести адрес 19 Алгоритмизация и программирование, язык C++, 10 класс Задачи « 5» : Ввести адрес файла и «разобрать» его на части, разделенные знаком '/'. Каждую часть вывести в отдельной строке. Пример: Введите адрес файла: C: /Фото/2013/Поход/vasya. jpg C: Фото 2013 Поход vasya. jpg К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

20 Алгоритмизация и программирование, язык C++, 10 класс Задачи « 6» : Напишите программу, 20 Алгоритмизация и программирование, язык C++, 10 класс Задачи « 6» : Напишите программу, которая заменяет во всей строке одну последовательность символов на другую. Пример: Введите строку: (X > 0) and (Y < X) and (Z > Y) and (Z <> 5) Что меняем: and Чем заменить: & Результат (X > 0) & (Y < X) & (Z > Y) & (Z <> 5) К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

21 Алгоритмизация и программирование, язык C++, 10 класс Задачи « 7» : Напишите программу, 21 Алгоритмизация и программирование, язык C++, 10 класс Задачи « 7» : Напишите программу, которая вычисляет сумму трех чисел, введенную в форме символьной строки. Все числа целые. Пример: Введите выражение: 12+3+45 Ответ: 60 « 8» : Напишите программу, которая вычисляет выражение, состоящее из трех чисел и двух знаков (допускаются только знаки «+» или «–» ). Выражение вводится как символьная строка, все числа целые. Пример: Введите выражение: 12 -3+45 Ответ: 54 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

22 Алгоритмизация и программирование, язык C++, 10 класс Задачи « 9» : Напишите программу, 22 Алгоритмизация и программирование, язык C++, 10 класс Задачи « 9» : Напишите программу, которая вычисляет выражение, состоящее из трех чисел и двух знаков (допускаются знаки «+» , «–» , «*» и «/» ). Выражение вводится как символьная строка, все числа целые. Операция «/» выполняется как целочисленное деление (div). Пример: Введите выражение: 12*3+45 Ответ: 81 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

23 Алгоритмизация и программирование, язык C++, 10 класс Задачи « 10» : Напишите программу, 23 Алгоритмизация и программирование, язык C++, 10 класс Задачи « 10» : Напишите программу, которая вычисляет выражение, состоящее из трех чисел и двух знаков (допускаются знаки «+» , «–» , «*» и «/» ) и круглых скобок. Выражение вводится как символьная строка, все числа целые. Операция «/» выполняется как целочисленное деление. Пример: Введите выражение: 2*(3+45)+4 Ответ: 100 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru