|
|||
Обращение к отдельным символам массива строк ⇐ ПредыдущаяСтр 2 из 2 Обращение к отдельным символам массива строк Для обращения к отдельным символам строки нужно просто указать оба индекса. Для примера рассмотрим, как вывести всех писателей, фамилия которых начинается с определённой буквы.
char first_letter = 'Т'; for (int i=0; i<5; i++) { //writers[i][0] - первая буква строки номер i if (writers[i][0] == first_letter) { cout << writers[i] << endl; } } Сортировка массива строк Практически любой алгоритм сортировки состоит из комбинации двух элементарных операций: сравнение элементов и перестановка элементов. Алгоритмы сортировки не зависят от того, чем являются элементы массива: числами, символами, строками, структурами и т.д. Однако реализация этих двух операций может различаться. Рассмотрим, как данные операции реализуются при сортировке массива строк. Для начала нужно определиться с тем, как будет выполняться сортировка. Данный вопрос возникает потому, что строки можно сортировать по алфавиту, по длине строки, по первой букве и т.д. Кроме того, как и всегда порядок может быть прямым (по возрастанию) и обратным (по убыванию). Вначале вспомним алгоритм сортировки методом прямого выбора (по возрастанию):
Теперь рассмотрим, как применить этот алгоритм для сортировки массива строк по алфавиту по возрастанию. Для поиска минимального элемента следует использовать оператор > или <. Перестановка элементов осуществляется стандартно в три присваивания. Расширим наш список писателей и отсортируем его.
#include "stdafx.h" #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; }
Для сортировки массива строк по длине достаточно изменить сравнение: … if (writers[j_min].length() > writers[j].length()) { … } …
ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ
#include "stdafx.h" #include <iostream> #include <string> #include <windows.h> #include <ctime> using namespace std;
const int n = 20; string cities[20] = { "Нижний Новгород", "Москва", "Красноярск", "Новосибирск", "Новый Уренгой", "Набережные Челны", "Одесса", "Барселона", "Лондон", "Нижний Тагил", "Сочи", "Ясная Поляна", "Барнаул", "Сергиев Посад", "Томск", "Омск", "Челябинск", "Великий Устюг", "Киев", "Иркутск" };
void printCities() { for (int i=0; i<n; i++) { cout << cities[i] << endl; } }
string longestString() { string result = cities[0]; for (int i=1; i<n; i++) { if (result.length() < cities[i].length()) { result = cities[i]; } } return result; }
int totalSymbols() { int result = 0; for (int i=0; i<n; i++) { result += cities[i].length();; } return result; }
void sortCities() { for (int i=0; i<n-1; i++) { int j_max = i; for (int j=i+1; j<n; j++) { if (cities[j_max] > cities[j]) { j_max = j; } } string temp = cities[i]; cities[i] = cities[j_max]; cities[j_max] = temp; } }
void startWith(char firstLetter) { for (int i=0; i<n; i++) { if (cities[i][0] == firstLetter) { cout << cities[i]; } } }
void printMenu() { cout << "1 - Вывести все города\n"; cout << "2 - Отсортировать по алфавиту\n"; cout << "3 - Города, начинающиеся в буквы...\n"; cout << "4 - Город с самым длинным названием\n"; cout << "5 - Сколько всего символов\n"; cout << "0 - Выход\n"; } int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251);
while (true) { printMenu(); int choice; cout << "Ваш выбор - "; cin >> choice; switch (choice) { case 1 : printCities(); break; case 2 : sortCities(); break; case 3 : cout << "Введите букву: "; char letter; cin >> letter; startWith(letter); break; case 4 : cout << longestString() + "\n"; break; case 5 : cout << totalSymbols() << endl; break; case 0 : exit(EXIT_SUCCESS); default : cout << "Неправильный выбор\n"; } system("pause"); system("cls"); } return 0; }
КОНТРОЛЬНЫЕ ВОПРОСЫ
|
|||
|