1 / 175

Программирование

Программирование. Часть 4 Структуры данных. 4. Структурное программирование 4. 5 . Базовые структуры данных: структуры. Программа = Структуры данных + Алгоритмы. СТРУКТУРА ДАННЫХ – способ представления данных в программе для компьютера

sinjin
Download Presentation

Программирование

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Программирование Часть 4 Структуры данных

  2. 4. Структурное программирование 4.5. Базовые структуры данных: структуры Программа = Структуры данных + Алгоритмы • СТРУКТУРА ДАННЫХ – способ представления данных в программе для компьютера • ПРОГРАММА - описание структур данных и алгоритма решения задачи на языке программирования, автоматически переводимое на язык машинных команд конкретной ЭВМ помощи транслятора (интерпретатора). Задача: Спроектировать структуру данных для представления в памяти компьютера информации о членах университетского коллектива.

  3. 4. Структурное программирование 4.5. Базовые структуры данных: структуры • НАЧНЕМ С ДАННЫХ О члене университетского коллектива. ПОСТАВЛЕНА ЗАДАЧА ХРАНИТЬ И ОБРАБАТЫВАТЬ СЛЕДУЮЩУЮ ИНФОРМАЦИЮ О нем: • Идентификационный номер (студенческого билета или удостоверения) • Фамилия • Имя • Отчество • Дата рождения • Домашний адрес • Дата зачисления (на работу или учебу) • Должность • Является ли членом профсоюза

  4. 4. Структурное программирование 4.5. Базовые структуры данных: структуры • Выберем типы данных и имена переменных для хранения информации о каждом человеке: • Идентификационный номер – int id • Фамилия – char surname [80] • Имя – charfirstname[40] • Отчество –char patronymic [60] • Дата рождения – unsigned short birthyear, birthmonth, birthday • Адрес – char address [80] • Дата зачисления – unsigned short enteryear, entermonth, enterday • Должность – char position [30] • Является ли членом профсоюза – booltradeunion

  5. 4. Структурное программирование 4.5. Базовые структуры данных: структуры • Структура – упорядоченное множество данных различного типа, которые называются полями или членами структуры. • Доступ к полю структуры осуществляется по имени структуры и имени поля. • Поля структуры могут иметь любой тип (кроме void). • Структура может содержать только такие поля, длина которых известна компилятору в момент определения структуры. • Структурным типом данных или просто структурой называется тип, описывающий структуру. • Синтаксис объявления структурного типа: • structИмя_структуры • { • Тип_ поля_1 Имя_поля1; • Тип_ поля_2 Имя_поля2; • … • };

  6. 4. Структурное программирование 4.5. Базовые структуры данных: структуры Примеры объявления структурныхтипов : struct Date struct Name { { unsigned short year; char surname [80]; unsigned short month; char firstname [40]; unsigned short day; char patronymic [60]; }; }; struct Cmplx { double re; double im; }; Обратите внимание: описание структуры заканчивается точкой с запятой

  7. 4. Структурное программирование 4.5. Базовые структуры данных: структуры Размещение в памяти структурныхтипов : structDate { unsigned short year; unsigned short month; unsigned short day; }; structCmplx { double re; double im; }; Внимание! Компилятор не гарантирует размещение элементов структуры в смежных ячейках памяти!

  8. 4. Структурное программирование 4.5. Базовые структуры данных: структуры Объявление переменных структурного типа Имя_типаИмя_переменной; Имя_типаИмя_переменной={список значений}; Примеры объявления переменных структурныхтипов, Cmplx c1, c2, c3; Date birth, enter, expel, graduate, death ; struct// Совмещение объявлений типа и переменных {// в анонимной структуре double re; double im; } c1, c2, c3;

  9. 4. Структурное программирование 4.5. Базовые структуры данных: структуры Примеры объявления переменных структурныхтипов с инициализацией Cmplx c1 = {0, 0}; Date birth = {1991, 10, 7}, enter = {2009, 9 , 1}, graduate = {2014, 6, 30}; struct// Совмещение объявлений типа и переменных { double re; double im; } c1={0, 0}, c2={1, 0}, c3={1, 0};

  10. 4. Структурное программирование 4.5. Базовые структуры данных: структуры Доступ к элементам структуры: оператор . (точка) Имя_переменной.Имя_поля birth.year = 2002; birth.month=12; c1.re = 12.5; c1.im = -24; c2.re = c1.re*c1.re + c1.im*c1.im; Присваивание переменных – структур одного типа : c1=c2; expel.year=enter.year;

  11. 4. Структурное программирование 4.5. Базовые структуры данных: структуры • Структуры могут: • объединять данные (поля) различных типов; • быть вложенными друг в друга struct Date { unsigned short year; unsigned short month; unsigned short day; }; struct Member { int id; Name ownname; Date birth; char address [80]; Date enter; char position [30]; //"student", "teacher", "scientist" … bool tradeunion; }; struct Name { char surname [80]; char firstname [40]; char patronymic [60]; };

  12. 4. Структурное программирование 4.5. Базовые структуры данных: структуры Рассмотрим работу с вложенными структурами struct Member { int id; Name ownname; Date birth; char address [80]; Date enter; char position [30]; bool tradeunion; }; Member stud1 = {298678, “Сидорова”, “Анна”, “Ивановна”, 1991, 10, 7, “Минск, ул. Серова 23, кв. 1”, 2009, 9, 1,“student”, false}; Member prep4 = {129639, {“Попкец”, “Павел”, “Петрович”}, {1980, 6, 1}, “Минск, ул. Казинца 75, кв. 12”, {2003, 3, 18}, “teacher”, true}; Member temp = stud1; stud1.cardno = 123456789; stud1.ownname.surname = “Попкец”; stud1.ownname.surname = prep4.ownname.surname; prep4=temp;

  13. 4. Структурное программирование 4.5. Базовые структуры данных: структуры А как представить в памяти информацию обо всех членах коллектива, например, факультета? Student stud1, stud2, stud3, stud4, stud5, … stud788, stud789, stud790;

  14. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки • Массив – нумерованная последовательность данных одного типа, которые хранятся в непрерывной области памяти друг за другом. Члены последовательности данных называются элементами массива. • Доступ к элементу массива производится путем указания имени массива и номера элемента. • Нумерация элементов может выполняться одной или несколькими последовательностями целых чисел – индексными последовательностями. • Если нумерация выполняется одной последовательностью говорят, что массив является одномерным, в противном случае – многомерным. • Нумерация элементов массива всегда начинается с 0, а номер каждого следующего члена больше номера предыдущего на 1.

  15. 4. Структурное программирование 4.5. Базовые структуры данных: структуры Размещение в памяти массивов: int b [10] short x [2][4] Внимание! Компилятор гарантирует размещение элементов массива в смежных ячейках памяти!

  16. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки • Массив определяется: • именем (идентификатором); • количеством размерностей - числом номеров, необходимых для указания местонахождения элемента массива; • размером (диапазоном изменения индексов) по каждой размерности. • Конфигурация массива фиксирована. • Все элементы массива принадлежат к одному и тому же типу данных. • Элементами массива могут быть как простые переменные любых типов, так и переменные составных типов (массивов, структур, строк и т.д.). • В качестве индексов в С++ могут использоваться константы и переменные любых целых типов.

  17. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Синтаксис описания одномерного массива Имя_типа_элемента Имя_массива[Размер]; Имя_типа_элемента Имя_массива[Размер] = {список значений}; Примеры описаний массивов float b[20] ; const int n=4; int a[n] = {5, 6,7,8}; 4 байта

  18. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Примеры описаний массивов float x[20] = {0} ; Если список инициализации содержит меньше элементов, чем массив, оставшиеся элементы инициализируются значением 0. Если список содержит больше элементов, чем массив, компилятор генерирует сообщение об ошибке. double y [ ] = {5.5, 6.8, 8.8, 9.5, 10.3} Если значения элементов перечисляются явно, размер массива можно не указывать (компилятор определит его по количеству элементов) 8 байтов

  19. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Операция индексирования Имя_массива[Индекс]; Индекс – целочисленное выражение, значение которого изменяется между 0 и (Размер-1). Для переменной – индекса лучше выбирать тип целый со знаком, так как контроль выхода значений индекса за допустимый диапазон не ведется. const int n=4; int a[n] = {5, 6,7,8}; int i = 3; a[1] = a[2]+a[i]-6;

  20. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Задача. Написать программу, осуществляющую ввод, сложение, вычитание, скалярное умножение двух n-мерных векторов и вывод результатов. Структура данных для представления n-мерного вектора: одномерный массив размера n типа double. Расчетные формулы:

  21. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Если список инициализации содержит меньше значений, чем число элементов массива, оставшиеся элементы будут инициализированы 0 Решение задачи: int main() { const int n=4; double a[n]={0}, b[n]={0}, res[n]={0}; cout << "Enter..." << endl; for (int i=1; i<=n; i++) { cout << endl << "a" << i << ": "; cin >> a[i-1]; cout << "b" << i << ": "; cin >> b[i-1]; }

  22. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Решение задачи: for (int i=1; i<=n; i++) res[i-1]=a[i-1]+b[i-1]; //Sum cout << endl << "a + b = ( "; for (inti=1; i<=n; i++) cout << res[i-1] << " "; cout << ")"; for (inti=1; i<=n; i++) res[i-1]=a[i-1]-b[i-1]; //Difference cout << endl << "a - b = ( "; for (inti=1; i<=n; i++) cout << res[i-1] << " "; cout << ")"; double r=0; for (inti=1; i<=n; i++) r+=a[i-1]*b[i-1]; //Product cout << endl << "a * b = " << r; _getch(); return 0; };

  23. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Задача (Решето Эратосфена). Найти простые числа, меньшие наперед заданного n. Идея алгоритма Эратосфена: из списка всех чисел от 2 до n последовательно вычеркивать числа, кратные уже известным простым числам. Основная структура данных программы: одномерный массив размера 2..n типа boolean. Индексы массива соответствуют анализируемым числам. Элемент массива имеет значение true, если индекс этого элемента - простое число.

  24. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Алгоритм на псевдокоде • Данные. • Максимальное анализируемое число n • Массив, хранящий информацию, простым ли является значение индекса каждого элемента: boolerato [n] • Алгоритм. • Инициализировать константу n • Объявить массив eratoи инициализировать его значениями true • Для всех iот 2 до n • 3.1. Если erato [ i ] == true , • 3.1.1. Заменить на false значения элементов массива erato • с индексами от iдо n, кратными i • 4. Вывести значения индексов элементов массива erato, • принимающих значение true

  25. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Оптимизируем и уточняем алгоритм на псевдокоде • Данные. • Максимальное анализируемое число n • Массив, хранящий информацию, простым ли является значение индекса каждого элемента: boolerato [n] • Алгоритм. • Инициализировать константу n • Объявить массив eratoи инициализировать его значениями true • Для всех iот 2 до целой части sqrt (n) • 3.1. Если erato [ i ] == true , • 3.1.1. Заменить на false значения элементов массива erato • с индексами от iдо n, равными i * j, где j изменяется • от i до n • 4. Вывести значения индексов элементов массива erato, • принимающих значение true

  26. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Уточняем алгоритм на псевдокоде • Данные. • Максимальное анализируемое число n • Массив, хранящий информацию, простым ли является значение индекса каждого элемента: boolerato [n+1] • Алгоритм. • Инициализировать константу n • Объявить массив eratoи инициализировать его значениями true • Для всех iот 2 до целой части sqrt (n) • 3.1. Если erato [ i ] == true, для всех j от iдо n выполнять • 3.1.1. Если i*j > n выйти из цикла • 3.1.2. erato [i*j] = false • 4. Вывести значения индексов элементов массива erato, • принимающих значение true

  27. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Прокрутка алгоритма вручную • Алгоритм. • Инициализировать константу n • Объявить массив eratoи инициализировать его значениями true • Для всех iот 2 до целой части sqrt (n) • 3.1. Если erato [ i ] == true, для всех j от iдо n выполнять • 3.1.1. Если i*j > n выйти из цикла • 3.1.2. erato [i*j] = false • 4. Вывести значения индексов элементов массива erato, • принимающих значение true erato[i] = true i = 2 j =

  28. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Прокрутка алгоритма вручную • Алгоритм. • Инициализировать константу n • Объявить массив eratoи инициализировать его значениями true • Для всех iот 2 до целой части sqrt (n) • 3.1. Если erato [ i ] == true, для всех j от iдо n выполнять • 3.1.1. Если i*j > n выйти из цикла • 3.1.2. erato [i*j] = false • 4. Вывести значения индексов элементов массива erato, • принимающих значение true erato[i] = true i = 2 erato[4] = false j = 2

  29. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Прокрутка алгоритма вручную • Алгоритм. • Инициализировать константу n • Объявить массив eratoи инициализировать его значениями true • Для всех iот 2 до целой части sqrt (n) • 3.1. Если erato [ i ] == true, для всех j от iдо n выполнять • 3.1.1. Если i*j > n выйти из цикла • 3.1.2. erato [i*j] = false • 4. Вывести значения индексов элементов массива erato, • принимающих значение true erato[i] = true i = 2 erato[6] = false j = 3

  30. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Прокрутка алгоритма вручную • Алгоритм. • Инициализировать константу n • Объявить массив eratoи инициализировать его значениями true • Для всех iот 2 до целой части sqrt (n) • 3.1. Если erato [ i ] == true, для всех j от iдо n выполнять • 3.1.1. Если i*j > n выйти из цикла • 3.1.2. erato [i*j] = false • 4. Вывести значения индексов элементов массива erato, • принимающих значение true erato[i] = true i = 2 erato[8] = false j = 4

  31. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Прокрутка алгоритма вручную • Алгоритм. • Инициализировать константу n • Объявить массив eratoи инициализировать его значениями true • Для всех iот 2 до целой части sqrt (n) • 3.1. Если erato [ i ] == true, для всех j от iдо n выполнять • 3.1.1. Если i*j > n выйти из цикла • 3.1.2. erato [i*j] = false • 4. Вывести значения индексов элементов массива erato, • принимающих значение true erato[i] == true i = 2 erato[10] = false j = 5

  32. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Прокрутка алгоритма вручную • Алгоритм. • Инициализировать константу n • Объявить массив eratoи инициализировать его значениями true • Для всех iот 2 до целой части sqrt (n) • 3.1. Если erato [ i ] == true, для всех j от iдо n выполнять • 3.1.1. Если i*j > n выйти из цикла • 3.1.2. erato [i*j] = false • 4. Вывести значения индексов элементов массива erato, • принимающих значение true erato[i] == true i = 2 erato[12] = false j = 6

  33. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Прокрутка алгоритма вручную • Алгоритм. • Инициализировать константу n • Объявить массив eratoи инициализировать его значениями true • Для всех iот 2 до целой части sqrt (n) • 3.1. Если erato [ i ] == true, для всех j от iдо n выполнять • 3.1.1. Если i*j > n выйти из цикла • 3.1.2. erato [i*j] = false • 4. Вывести значения индексов элементов массива erato, • принимающих значение true erato[i] == true i = 2 erato[14] = false j = 7

  34. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Прокрутка алгоритма вручную • Алгоритм. • Инициализировать константу n • Объявить массив eratoи инициализировать его значениями true • Для всех iот 2 до целой части sqrt (n) • 3.1. Если erato [ i ] == true, для всех j от iдо n выполнять • 3.1.1. Если i*j > n выйти из цикла • 3.1.2. erato [i*j] = false • 4. Вывести значения индексов элементов массива erato, • принимающих значение true erato[i] == true i = 2 erato[16] = false j = 8

  35. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Прокрутка алгоритма вручную • Алгоритм. • Инициализировать константу n • Объявить массив eratoи инициализировать его значениями true • Для всех iот 2 до целой части sqrt (n) • 3.1. Если erato [ i ] == true, для всех j от iдо n выполнять • 3.1.1. Если i*j > n выйти из цикла • 3.1.2. erato [i*j] = false • 4. Вывести значения индексов элементов массива erato, • принимающих значение true erato[i] == true i = 2 i * j > n j = 9

  36. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Прокрутка алгоритма вручную • Алгоритм. • Инициализировать константу n • Объявить массив eratoи инициализировать его значениями true • Для всех iот 2 до целой части sqrt (n) • 3.1. Если erato [ i ] == true, для всех j от iдо n выполнять • 3.1.1. Если i*j > n выйти из цикла • 3.1.2. erato [i*j] = false • 4. Вывести значения индексов элементов массива erato, • принимающих значение true erato[i] == true i = 3 erato[9] = false j = 3

  37. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Прокрутка алгоритма вручную • Алгоритм. • Инициализировать константу n • Объявить массив eratoи инициализировать его значениями true • Для всех iот 2 до целой части sqrt (n) • 3.1. Если erato [ i ] == true, для всех j от iдо n выполнять • 3.1.1. Если i*j > n выйти из цикла • 3.1.2. erato [i*j] = false • 4. Вывести значения индексов элементов массива erato, • принимающих значение true erato[i] == true i = 3 erato[12] = false Повторное присваивание выгоднее проверки! j = 4

  38. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Прокрутка алгоритма вручную • Алгоритм. • Инициализировать константу n • Объявить массив eratoи инициализировать его значениями true • Для всех iот 2 до целой части sqrt (n) • 3.1. Если erato [ i ] == true, для всех j от iдо n выполнять • 3.1.1. Если i*j > n выйти из цикла • 3.1.2. erato [i*j] = false • 4. Вывести значения индексов элементов массива erato, • принимающих значение true erato[i] == true i = 3 erato[15] = false j = 5

  39. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Прокрутка алгоритма вручную • Алгоритм. • Инициализировать константу n • Объявить массив eratoи инициализировать его значениями true • Для всех iот 2 до целой части sqrt (n) • 3.1. Если erato [ i ] == true, для всех j от iдо n выполнять • 3.1.1. Если i*j > n выйти из цикла • 3.1.2. erato [i*j] = false • 4. Вывести значения индексов элементов массива erato, • принимающих значение true erato[i] == true i = 3 i * j > n j = 6

  40. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Прокрутка алгоритма вручную • Алгоритм. • Инициализировать константу n • Объявить массив eratoи инициализировать его значениями true • Для всех iот 2 до целой части sqrt (n) • 3.1. Если erato [ i ] == true, для всех j от iдо n выполнять • 3.1.1. Если i*j > n выйти из цикла • 3.1.2. erato [i*j] = false • 4. Вывести значения индексов элементов массива erato, • принимающих значение true erato[i] == false i = 4 j =

  41. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Прокрутка алгоритма вручную • Алгоритм. • Инициализировать константу n • Объявить массив eratoи инициализировать его значениями true • Для всех iот 2 до целой части sqrt (n) • 3.1. Если erato [ i ] == true, для всех j от iдо n выполнять • 3.1.1. Если i*j > n выйти из цикла • 3.1.2. erato [i*j] = false • 4. Вывести значения индексов элементов массива erato, • принимающих значение true i = j =

  42. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Программа на С++ int main()// sieve of Eratosthenes { const unsigned int n = 1000; const unsigned int size = n+1; bool erato [size]={0}; for (int i = 2; i <= n; i++) erato [i] = 1; for (int i = 2; i <= static_cast <int> (sqrt(static_cast <float> (n))); i++) { if (erato[i]) for (int j = i; j <= n; j++) { if (i*j > n)break; erato [i*j]=false; } } for(int i=2; i <= n; i++) if (erato[i]) cout << i << endl; _getch(); return 0; }

  43. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки • Строки символов в С++ • В С++ есть несколько способов представления строк символов: • в виде одномерного массива символов (строки, завершающиеся нулевым байтом); • в виде объекта класса string; • другие способы в зависимости от реализации. • Строки, завершающиеся нулевым байтом • Описываются как одномерный массив, каждый элемент которого имеет тип char. • Символы строки последовательно располагаются в элементах массива, начиная с нулевого. • В элемент массива, следующий за последним символом автоматически записывается элемент с ASCII кодом 0: ‘\0’

  44. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки • Описание строк, завершающихся нулевым байтом • Строка описывается как обычный массив символов char • Размер массива должен быть на 1 больше длины самой длинной строки, которую предполагается в этом массиве хранить • char s[10] = “Hello”; • Основные отличия строк от массивов: • В процессе выполнения программы отслеживается текущая длина строки • Строка в целом может быть проинициализирована значением строкового литерала (а не только поэлементно символьными значениями) • При помещении идентификатора символьного массива в поток cout выводится не адрес массива, а его содержимое от 0-го элемента до последнего перед завершающим символом \0

  45. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Самые распространенные функции из <string.h>

  46. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки Примеры char st [20] = “ Good Morning”; cout << st; // Good Morning strcpy(st, “Hello”); cout << st; // Hello strcpy(st,“”); Мусор

  47. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки • Основные ограничения на действия со строками, завершающимися нулевым байтом • Строки, как и обычные массивы, нельзя присваивать друг другу, используя оператор присваивания(включая присвоение строке строкового литерала где-либо, кроме начальной инициализации). • К строкам, как к обычным массивам, нельзя применять операции сравнения • Для строк нет перегруженных операций (например, + для операции конкатенации) • Для выполнения операций копирования, конкатенации, сравнения строк и ряда других операций приходится использовать встроенные функции, описанные в заголовке <string.h>

  48. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки int main() // Basic operations with strings { char st [20] = "*******************"; // 19 '*‘ char st1 [20]; for (int i=0; i <=19; i++) cout << st[i]; // ******************* cout << endl<< st << " " << strlen (st) << endl; //******************** 19 strcpy(st,"Good Morning"); for (int i=0; i <=19; i++) cout << st[i]; // Good Morning ****** cout << endl<< st << " " << strlen (st) << endl; // Good Morning 12 strcpy(st,"Hello"); for (int i=0; i <=19; i++) cout << st[i]; // Hello orning ****** cout << endl<< st << " " << strlen (st) << endl; // Hello 5 cout << endl; strcpy(st1, strchr(st, 'e')); cout << st1 << endl; // ello bool i = strchr(st, 'e'); cout << i << endl; // 1 if (strchr(st, 'e')) cout << "char e found"; // char e found _getch(); return 0; }

  49. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки • Ввод строк • При вводе строки с клавиатуры (помещение в поток cin) следует контролировать длину вводимой строки (чтобы она не превышала длину массива, где будет храниться строка • char str [MAX]; • cin >> setw (MAX) >> str; // Ввод до MAX-1 символов • При помещении строки в поток cinпробелы и символы новой строки конвертируются в завершающий нулевой байт • cin >> setw (MAX) >> str; // Введем строку “Good Morning” • cout << str; // Получим Good • Чтобы ввести строку, содержащую пробелы, необходимо вызвать встроенную функцию getlineдля потока cin: • cin.getline(st, MAX); или • char SEP=‘$’; • cin.getline (st, MAX, SEP); // Задаем свой разделитель строк

  50. 4. Структурное программирование 4.6. Базовые структуры данных: массивы и строки int main()// Counting number of characters into string { const int MAX = 80; // Maximum array dimension char buffer[MAX]=""; // Input buffer int count = 0; // Character counter while (true) { cout << "Enter a string of less than 80 characters:\n"; cin.getline(buffer, MAX); if (! strcmp(buffer,"")) break; for(count=0; buffer[count] != '\0'; count++);// The same: count=strlen(buffer) cout << endl << "The string \"" << buffer << "\" has " << count << " characters." << endl; } return 0; }

More Related