Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Языки программирования (пособие).doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
965 Кб
Скачать
☆

4.2.3Вывод и ввод массива строк

При выводе массива строк нужно использовать цикл:

for (int i=0; i<5; i++) {

cout << writers[i];

}

При вводе следует учитывать, что для ввода строк из нескольких слов следует использовать функцию getline().

for (int i=0; i<5; i++) {

getline(cin, writers[i]);

}

4.2.4Обращение к отдельным символам массива строк

Для обращения к отдельным символам строки нужно просто указать оба индекса. Для примера рассмотрим, как вывести всех писателей, фамилия которых начинается с определенной буквы.

char first_letter = 'Т';

for (int i=0; i<5; i++) {

//writers[i][0] - первая буква строки номер i

if (writers[i][0] == first_letter) {

cout << writers[i] << endl;

}

}

4.2.5Сортировка массива строк

Практически любой алгоритм сортировки состоит из комбинации двух элементарных операций: сравнение элементов и перестановка элементов. Алгоритмы сортировки не зависят от того, чем являются элементы массива: числами, символами, строками, структурами и т.д. Рассмотрим, как данные операции реализуются при сортировке массива строк.

Для начала нужно определиться с тем, как будет выполняться сортировка. Данный вопрос возникает потому, что строки можно сортировать по алфавиту, по длине строки, по первой букве и т.д. Кроме того, как и всегда порядок может быть прямым (по возрастанию) и обратным (по убыванию).

Вначале вспомним алгоритм сортировки методом прямого выбора (по возрастанию):

  • Находим минимальный элемент и меняем его местами с первым;

  • Находим минимальный элемент, начиная со второго, и меняем его местами со вторым;

  • Находим минимальный элемент, начиная с третьего, и меняем его местами с третьим;

  • …

Теперь рассмотрим, как применить этот алгоритм для сортировки массива строк по алфавиту по возрастанию. Для поиска минимального элемента следует использовать оператор > или <. Перестановка элементов осуществляется стандартно в три присваивания. Расширим наш список писателей и отсортируем его (рис. 30).

#include <iostream>

#include <string>

using namespace std;

//Объявляем массив глобально, чтобы

//его видели все функции

const int size = 10;

string writers[size] = {

"Толстой", "Достоевский", "Твен",

"Майн Рид", "Горький", "Чехов",

"Дефо", "Тургенев", "Островский",

"Берроуз"

};

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

void printWriters() {

for (int i=0; i<size; i++) {

cout << writers[i] << endl;

}

}

//Меняем местами строки номер i и j

void swap(int i, int j) {

string temp;

temp = writers[i];

writers[i] = writers[j];

writers[j] = temp;

}

//Поиск индекса минимального элемента,

//начиная с элемента номер startPosition

int findMin(int startPosition) {

int j_min = startPosition;

for (int j=startPosition; j<size; j++) {

//Сравнение элементов

if (writers[j_min] > writers[j]) {

j_min = j;

}

}

return j_min;

}

//Сортировка методом прямого выбора

void sortWriters() {

for (int i=0; i<size-1; i++) {

//Ищем индекс минимального, начиная с i-го

int j_min = findMin(i);

//меняем местами его и i-ый

swap(i, j_min);

}

}

int main() {

setlocale(LC_ALL, "Russian");

cout << "Исходный массив:\n";

printWriters();

sortWriters();

cout << "\nОтсортированный массив:\n";

printWriters();

return 0;

}

Рисунок 30. Сортировка по алфавиту

Для сортировки массива строк по длине достаточно изменить сравнение (рис. 31):

…

if (writers[j_min].length() > writers[j].length()) {

…

}

…

Рисунок 31. Сортировка по длине