Форум программистов, компьютерный форум CyberForum.ru

Отсортируйте строки таблицы в первую очередь по первому критерию, при равенстве по первому критерию, отсортируйте по второму - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ С++ работа с библиотекой шаблонов stl (map, vector) http://www.cyberforum.ru/cpp-beginners/thread729813.html
Здравствуйте! у меня проблема с заданием по stl. Есть такая программа: #include<map> #include<iostream> #include<vector> #include<string> #include<sstream> #include<fstream> #include<algorithm> #include<conio.h>
C++ Очень нада.строки в файле нужно что бы выводило последнее слово в строчке(строк может быть много)..у меня выводит последнее слово последней строчки. #include <iostream> #include <fstream> #include <conio.h> #include <string> using namespace std; int main() { http://www.cyberforum.ru/cpp-beginners/thread729811.html
C++ Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач до Хкон с шагом dx
Знаю что подобные задачи были ,но моей не попалось.Сам 2 день не могу решить свою.Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач до Хкон с шагом dx Хнач = -2 Хкон = 2 dx = 0.01
C++ Найти вектор, который составлен из наибольших членов матрицы до главной диагонали включительно
Народ помогите решить в си++ 2010 и в MS Excel вот эту задачу. Задание выдает преподаватель каждому студенту индивидуально из ниже приведенных задач. Вариант 13. Задачи посвящены работе с одномерными и двумерными массивами. Значения для n,m выбираются студентами произвольно, индекс i изменяется от 1 до n, а индекс j - соответственно от 1 до m, причем m и n могут совпадать. 13. Дана...
C++ Поменять местами первое и последнее слова http://www.cyberforum.ru/cpp-beginners/thread729802.html
Исходные данные (текст) – строка символов. Ввод и вывод текста реализовать с помощью функций ввода-вывода строк: gets(char* S) и puts(char* S). Реализовать задачи обработки строк в виде отдельных функций. Сделать два варианта решения каждой задачи. Первый вариант – обработка строки как массива символов, второй вариант – с помощью функций из <string.h> и указателей. Поменять местами первое...
C++ Не получается запустить "hello, world" Вот начал изучать С++ по книге Страуструпа. Не получается запустить "hello, world". Установил visual c++ 2010, создал пустой проект, писал другие проги из инета, они работают. Я так понимаю, что дело в заголовке. Нашел инструкцию по-английски, зашел на его сайт, вообщем там его надписи закинул в блокнот, дальше вставил в раздел заголовочные файлы, переименовав . Дальше там написано, что нужно... подробнее

Показать сообщение отдельно
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
15.12.2012, 14:54     Отсортируйте строки таблицы в первую очередь по первому критерию, при равенстве по первому критерию, отсортируйте по второму
Задача готова, надо найти мелкий баг.
Есть прямоугольная таблица, содержащая слова. Каждые ее столбец имеет свое имя. Задан набор критериев сортировки вида "ИМЯ_ПОЛЯ ПОРЯДОК_СОРТИРОВКИ", где ПОРЯДОК_СОРТИРОВКИ это либо ASC (неубывающий порядок) либо DESC (невозрастающий порядок). В наборе критерии записаны через запятую c пробелом. Отсортируйте строки таблицы в первую очередь по первому критерию, при равенстве по первому критерию, отсортируйте по второму. И так далее. Если две строки равны с точки зрения набора критериев, то сохраните их относительный порядок друг относительно друга. Считайте, что каждый элемент таблицы имеет тип строка, пользуйтесь лексикографическим сравнением.

Входные данные
В первой строке записаны имена столбцов. Во второй строке записан набор критериев. Далее входные данные содержат таблицу. Все слова разделяются единичными пробелами.

Выходные данные
Выведите таблицу после сортировки.

Пример

Ввод
NAME GROUP AGE
GROUP ASC, AGE DESC
Alex 412 19
Peter 422 19
Sergey 412 18
Andrey 311 18

Вывод
Andrey 311 18
Alex 412 19
Sergey 412 18
Peter 422 19

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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
#include <map>
#include <string>
 
using namespace std;
 
struct space{
    vector <string> mline;
};
 
map <string, int> names;
vector <int> criteries;
vector <bool> msign;
 
bool loweq(int criteria, const space& a, const space& b){
    if (criteria < criteries.size())
        if (a.mline[criteries[criteria]] == b.mline[criteries[criteria]]){
            return loweq(criteria + 1, a, b);   
        }else{
            return ((a.mline[criteries[criteria]] < b.mline[criteries[criteria]]) == msign[criteria]);
        }
    return 0;
}
 
bool pred(const space& a, const space& b){
    return loweq(0, a, b);  
}
 
int main(){
    freopen("input.txt", "rt", stdin);
    freopen("output.txt", "wt", stdout);
    string str;
    int num = 0;
    bool flag = 0;
    while (cin >> str){
        if (!flag && names.count(str) == 0){
            names[str] = num++;
        }else{
            flag = 1;
        }
        if (flag){
            if (names.count(str) != 0){
                criteries.push_back(names[str]);
            }else{
                return 0;
            }
            string rule;
            cin >> rule;
            if (rule == "ASC,"){
                msign.push_back(1);
            }
            if (rule == "ASC"){
                msign.push_back(1);
                break;
            }
            if (rule == "DESC,"){
                msign.push_back(0);
            }
            if (rule == "DESC"){
                msign.push_back(0);
                break;
            }
        }
    }
    vector <space> ans;
    int n = names.size();
    while (cin >> str){
        space ns;
        ns.mline.push_back(str);
        for (int i = 1; i < n; i++){
            cin >> str;
            ns.mline.push_back(str);
        }
        ans.push_back(ns);
    }
 
    stable_sort(ans.begin(), ans.end(), pred);
 
    for (int i = 0; i < ans.size(); i++){
        for (int j = 0; j < n-1; j++){
            cout << ans[i].mline[j] << " ";
        }
        cout << ans[i].mline[n-1] << endl;
    }
    return 0;
}
Не проходит 2 теста из 10. Выдаёт PE(Presentation Error Скорее всего пустой файл), при этом если убрать
C++
1
2
3
4
5
if (names.count(str) != 0){
    criteries.push_back(names[str]);
}else{
    return 0;
}
и оставить
C++
1
criteries.push_back(names[str]);
то один из тестов станет RE (Runtime error)

Добавлено через 15 часов 25 минут
Тема актуальна! Срочно нужна помощь. Полагаю дело в считывании

Добавлено через 2 часа 34 минуты
Тема актуальна! Срочно нужна помощь.

Добавлено через 4 часа 32 минуты
-----------

Добавлено через 13 часов 29 минут
-----------

Добавлено через 1 час 30 минут
Почти 150 просмотров и никто не может помочь. :\ Очень жаль

Добавлено через 23 часа 35 минут
аааа! выручайте

Добавлено через 1 час 16 минут
И даже эксперты помочь не в силах :\ А задача одна из самых лёгких...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru