Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 18.11.2020
Сообщений: 17

Сортировка строк в алфавитном порядке

07.09.2022, 20:29. Показов 1105. Ответов 7

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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
 
using namespace std;
 
class Train {
public:
    Train() {
        num = 0;
        start_hour = 00;
        start_min = 00;
        start_sec = 00;
        end_hour = 0;
        end_min = 00;
        end_sec = 00;
        begin = "No name";
        end = "No name";
        stop = "No name";
    }
 
    int num , start_hour, start_min , start_sec , end_hour , end_min, end_sec;
    string begin, end, stop;
};
 
 
void ShowVector(vector<Train>& input) {
    int v = input.size();
    for (int i = 0; i < v; ++i) {
        const char* charI = input[i].begin.c_str();
        for (int j = 0; j < v; ++j) {
            const char* charJ = input[j].begin.c_str();
            if (strcmp(charI, charJ) > 0) {
                cout << input[j].num << endl;
                cout << input[j].start_hour << endl;
                cout << input[j].start_min << endl;
                cout << input[j].start_sec << endl;
                cout << input[j].end_hour << endl;
                cout << input[j].end_min << endl;
                cout << input[j].end_sec << endl;
                cout << input[j].begin << endl;
                cout << input[j].end << endl;
                cout << input[j].stop << endl;
            }
        }
    }
}
 
int main()
{
    ifstream file;
    vector<Train> input;
    Train a;
 
    file.open("input.txt");
    if (!file.is_open()) {
        cout << "Cant open file" << endl;
    }
    else {
        while ( file >> a.num , file >> a.start_hour , file >> a.start_min , file >> a.start_sec , file >> a.end_hour , file >> a.end_min , file >> a.end_sec , file >> a.begin , file >> a.end , file >> a.stop ) input.push_back(a);
    }
    file.close();
 
    ShowVector(input);
 
    return 0;
}
Пробовал через strcmp(charI, charJ) > 0) , но видимо это не то. Вот пример данных , которые должны быть в файле:
1
06
30
00
13
00
00
BBBB - по этой строке сортировка
gorod1
gorod2
1
06
30
00
13
00
00
AAAAA - по этой строке сортировка
gorod1
gorod2
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.09.2022, 20:29
Ответы с готовыми решениями:

Сортировка строк в алфавитном порядке
Собственно сабж) Вроде бы сделал что-то похожее, но ошибка запрета доступа, если вводить строки с клавиатуры (понимаю, что не выделил...

Сортировка строк в алфавитном порядке
Помогите пожалуйста написать программу для сортировки строк в алфавитном порядке Программа открывает фаил input.txt и отоброжает его...

Сортировка строк матрицы в алфавитном порядке
Создаем двумерный динамический массив в котором надо отсортировать строки в алфавитном порядке. Вот код: void sortirowka(char...

7
2393 / 1922 / 763
Регистрация: 27.07.2012
Сообщений: 5,563
07.09.2022, 20:41
Цитата Сообщение от Kilk Посмотреть сообщение
Пробовал через strcmp(charI, charJ) > 0) , но видимо это не то
А почему > 0? По алфавиту - это когда < 0.
0
35 / 28 / 10
Регистрация: 11.04.2022
Сообщений: 197
07.09.2022, 21:15
мб что-то не понимаю, но почему не использовать std::sort ?
0
1 / 1 / 0
Регистрация: 18.11.2020
Сообщений: 17
07.09.2022, 21:33  [ТС]
Enyt, Можешь подробнее расписать как его применять в моем случае , я с ним не разобрался , в визуалке ерор
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
07.09.2022, 21:39
Лучший ответ Сообщение было отмечено Kilk как решение

Решение

Цитата Сообщение от Kilk Посмотреть сообщение
Можешь подробнее расписать как его применять в моем случае
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
struct Test{
   int a;
   string str; // сортируем по этому полю
};
int main(){
    vector<Test> vec{{1,"111"},{2,"1111"},{3,"cat"},{4,"catalog"}};
    sort(vec.begin(), vec.end(),[](const Test&a, const Test& b){
        return a.str<b.str;
    });
    for(const auto& v : vec)
        cout << v.str << endl;
    return 0;
}
0
1 / 1 / 0
Регистрация: 18.11.2020
Сообщений: 17
07.09.2022, 22:43  [ТС]
SmallEvil, можешь расписать что происходить в sort по действиям ? Просто то что нахожу в интернете не помогает понять суть по типу sort( a.n , a.n + 2 ) и тд. Вот у вас в примере тоже не понимаю для чего (const Test&a, const Test& b)
То есть мы от начала ( vec.begin() ) до конца ( vec.end() ) сортируем по какому правилу либо как
0
2393 / 1922 / 763
Регистрация: 27.07.2012
Сообщений: 5,563
07.09.2022, 22:56
Цитата Сообщение от Kilk Посмотреть сообщение
расписать что происходить в sort по действиям ?
Для этого неплохо было бы вообще в концепции STL вникнуть. Алгоритмы, итераторы, вот это вот всё.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
07.09.2022, 23:07
John Prick, по моему его смутила лямбда в вызове sort.
Цитата Сообщение от Kilk Посмотреть сообщение
То есть мы от начала ( vec.begin() ) до конца ( vec.end() ) сортируем по какому правилу
Именно так. Метод сравнения элементов вектора задан лямбда выражением.
Такой себе безымянной "функцией" (функциональный объект).
Алгоритм вызывает его в процессе сортировки элементов.
Если лямбду нужно использовать более одного раза, можно создать для переменную для нашей "функции".
C++
1
2
3
4
    auto cmp = [](const Test&a, const Test& b){
        return a.str<b.str;
    };
    sort(vec.begin(), vec.end(), cmp);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.09.2022, 23:07
Помогаю со студенческими работами здесь

Сортировка строк в алфавитном порядке (переделать на wstring)
Доброго времени суток. Рыскал по форуму и нашел замечательный код сортировки строк в алфавитном порядке. std::string str; ...

Сортировка массива строк по первым буквам в алфавитном порядке
Есть некоторые проблемы с реализацией этой простой задачи. После ввода последней строки прога вылетает. Код: #include...

Сортировка в алфавитном порядке
Написал скрипт сортировки по алфавиту. По идее работать должен, но к сожалению не работает. Вот код: struct stud{ char...

Сортировка в алфавитном порядке
Здравствуйте. Нужна помощь в сортировке. Код принимает информацию о абитуриентах (ФИО, группа, город, 3 оценки по экзам) и выводит список...

Сортировка в алфавитном порядке
Добрый день, мне нужно отсортировать таблицу в алфавитном порядке по фамилии, найти как это правильно сделать я не смог, может тут смогут...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru