Сортировка по алфавиту

67
09 ноября 2021, 11:00
#include "stdafx.h"
#include <windows.h>
#include <string>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct home {
string name;
int room;

};
void sort(home **q, int n)
{
cout << "1-num. sort 2- Sortirovka po alfavity \n";
int kol;
cin >> kol;
switch (kol) {
case 1:
for (int i = 0; i < n; i++) { // метод пузырька для int room + cout
for (int j = 0; j < n - i - 1; j++) {
if (q[j]->room > q[j + 1]->room) {
home *temp = q[j];
q[j] = q[j + 1];
q[j + 1] = temp;
}
}
}
for (int i = 0; i < n; i++) {
cout << q[i]->name << " " << q[i]->room << " \n ";
} break;
case 2:
// сортировка по алфавиту для string name;
break;
}

}
int main() {
cout << "1 input 2 out \n";
int active;
int n = 3;
home **q = new home*[n];
home *p = new home[n];
do {
cin >> active;
switch (active)
{
case 1:

for (int i = 0; i < 3; i++) {
cout << "Name Age \n ";
cin >> p[i].name >> p[i].room;
for (int i = 0; i < n; i++) {
q[i] = &p[i];
}
}
break;
case 2:





}
} while (active != 0);


system("Pause");
return 0;

}

Собственно говоря мне нужно отсортировать " string name;" по алфавиту. Желательно без указателей и векторов. Принимаю любой ответ который поможет мне сделать программу ( ссылки, фрагменты кода ). Спасибо

P.S код может быть корявым так как ещё новичок в с++.

Answer 1

Без указателей никак, извиняй.

// Сортировка по алфавиту
void sortByAlphabet(std::string *sourceArray, const int &arraySize) {
    // Сортируем
    for (int i=0; i < arraySize; ++i) {
        for (int j=i+1; j < arraySize; ++j) {
            if (sourceArray[i] > sourceArray[j]) {
                std::string tempStorage = sourceArray[i];
                sourceArray[i] = sourceArray[j];
                sourceArray[j] = tempStorage;
            }
        }
    }
}
// Здесь мы делаем все первые буквы маленькими (т.е. Т теперь t)
// Работает лишь с ASCII, т.е. с английскими буквами
void toLowercase(std::string *stringArray, const int &arraySize) {
    const int additionalValueForLowercase = 'a' - 'A';
    for (int i=0; i < arraySize; ++i) {
        // Если первая буква - большая, то переводим в маленькую
        if (stringArray[i][0] >= 'A' && stringArray[i][0] <= 'Z') {
            stringArray[i][0] += additionalValueForLowercase;
        }
    }
}
int main()
{
    std::string sourceArray[5] = {"Tom", "jery", "hapchushka", "Juggernaut", "Shrek"};
    toLowercase(&sourceArray[0], 5);
    sortByAlphabet(&sourceArray[0], 5);
    cout << endl << "Result" << endl;
    for (int i=0; i < 5; ++i) {
        cout << sourceArray[i] << " ";
    }
    return 0;
}

Вывод: hapchushka jery juggernaut shrek tom

READ ALSO
Как запустить команду в cmd

Как запустить команду в cmd

Как можно запустить команду cmd через system(""); что бы при этом не открывалась консоль именно при вызове system("");

190
Разные типы параметров у std::ios_base::width и std::setw

Разные типы параметров у std::ios_base::width и std::setw

Почему потоковый width для изменения принимает параметр типа std::streamsize, в то время как манипулятор setw принимает простой int? Насколько я понимаю,...

100
default initialization для std::vector

default initialization для std::vector

Можно ли как-то проинициализировать n элементов std::vector<int> по-умолчанию, те

82
Работа с файлами (считывание и запись)

Работа с файлами (считывание и запись)

Надо при помощи генератора случайных чисел сформировать 10 чисел в файлеНайти сумму максимального и минималного числа в файле

104