Хелпикс

Главная

Контакты

Случайная статья





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



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

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

 

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;

}

 

КОНТРОЛЬНЫЕ ВОПРОСЫ

  1. Как объявить массив строк?
  2. Как инициализировать массив строк?
  3. Как присвоить значения элементам массива строк?
  4. Как отсортировать массив строк?
  5.  Как отсортировать массив строк по длине?


  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.