Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
sertil_live
0 / 0 / 0
Регистрация: 23.04.2015
Сообщений: 9
#1

Сортировка чисел типа char с сохранением привязанного к этой цифре слова. VS2013 - C++

28.04.2015, 21:59. Просмотров 366. Ответов 4
Метки нет (Все метки)

Это одна из функций программы которая читает с .txt файла строки, в одной строке название команды в другой количество набранных очков. Программа должна отсортировать команды по убыванию очков. Я умею сортировать числа но не знаю как сделать так, чтоб после сортировки или вовремя сортировки количества набранных очков за числами оставались и названия команд.

Например текст:
qwertrty //название команд
21 //колич. очков
asdfg
4
kjhgffd
76
fghjkj
12
rdzygfiuhg
8

Мне нужно чтоб выводилось следующим образом:
kjhgffd
76
qwertrty
21
fghjkj
12
rdzygfiuhg
8
asdfg
4


Написал код но она выводит так, как сохранено в файле.

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
void vivod_naz_com_i_nab_och_sort()
{
    char gor1[20];
    char name1[20];//название команды
    char chis_p_i1[20];
    char ochki_za_igri1[20];//количество очков
    char kol_igrocov1[20];
    char k[20];
    int nom = 1;
    ifstream sort;
    sort.open("baza.txt", ios::in);
    if (!sort) { cout << "Файл не найден! "; }
    cout << "\n- № - Названия команды ------------ Очки за сезон -----------------------" << endl;
    for (int i = 0; i < razmer-1; i++)
    {
        sort.getline(gor1, sizeof(gor1));
        sort.getline(name1, sizeof(name1));
        sort.getline(chis_p_i1, sizeof(chis_p_i1));
        sort.getline(ochki_za_igri1, sizeof(ochki_za_igri1));
        sort.getline(kol_igrocov1, sizeof(kol_igrocov1));
        sort.getline(k, sizeof(k)); 
        cout << "  " << nom++ << "     " << name1 << endl;
        cout << "                                      " << ochki_za_igri1 << endl;
        cout << "-------------------------------------------------------------------------" << endl;;
    }
  _getch();
  sort.close();
  system("cls");
        cout << "\n                    Выберите желаемое действие";
        cout << "\n1> Повторить вывод ";
        cout << "\n2> Перейти в главное меню ";
        cout << "\n3> Выход из программы ";
        int q;  
        q = _getch();
        switch (q)
        {
        case '1': {vivod_naz_com_i_nab_och_sort(); break; }
        case '2': {main(); break; }
        case '3': {exit(0); break; }
        default: cout << "\n\n\t\t\t\tОшибка ввода!\n";
            _getch();
        }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2015, 21:59
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Сортировка чисел типа char с сохранением привязанного к этой цифре слова. VS2013 (C++):

Сортировка значений типа char
Здравствуйте, есть у меня структура: ФИО ученика и класс в котором он учится....

Условие типа if( масив типа char[x] [y] != переменная типа char) не срабатывает
Создал функцию ChangeWay(). Все, кроме if(map !=ar) (обе переменные типа...

Сортировка цифр в строке типа char
Здравствуйте! Помогите, пожалуйста, дописать программу. Прогррамма должна...

Преобразовать сроку чисел CHAR в массив чисел типа int
Помогите реализовать идею... Прегнать введённую сроку чисел char в массив int...

Замена одного слова на другое в строке типа char
Замена одного символа на другой в строке типа char - C++ Вообщем есть массив...

как поменять слова местами в массиве типа char?
нужно поменять введенный текс в массиве типа char так, чтобы менялись местами...

4
_Valera_
489 / 371 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
28.04.2015, 23:49 #2
считать это в структуру, а потом сортировать уже структуру
0
Aleks_Tret
9 / 9 / 13
Регистрация: 25.10.2014
Сообщений: 52
29.04.2015, 17:04 #3
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <iterator>
#include <algorithm>
#include <sstream>
 
template<class T1, class T2> struct Pair
{
    T1 first;
    T2 second;
    Pair():first(T1()), second(T2()){}
    Pair(const T1& x, const T2& y): first(x), second(y) {}
    template<class U, class V> Pair(const Pair<U,V>& p):first(p.first), second(p.second){}
};
 
template<class U, class B> struct teams_order
{
    bool operator()(const Pair<U, B>& a, const Pair<U, B>& b) const
    {
        return a.second > b.second;
    }
};
 
int main()
{
    
    std::string from, to;
    std::cin >> from >> to;
 
    std::ifstream in(from.c_str());
    std::ofstream out(to.c_str());
 
    std::ostream_iterator<std::string> itrout(out, "\n");
        
    std::vector<Pair<std::string, int>> vctteams;
 
    std::string tempstr;
 
    while(!in.eof()) 
    {   
        Pair<std::string, int> pteam;
        std::getline(in, pteam.first); 
        std::getline(in, tempstr);
        pteam.second = atoi(tempstr.c_str());
 
        vctteams.push_back(pteam);
    }
 
    std::sort(vctteams.begin(), vctteams.end(), teams_order<std::string, int>());
 
    typedef std::vector<Pair<std::string, int>>::const_iterator itrvct;
    for(itrvct t = vctteams.begin(); t != vctteams.end(); t++)
        out << t->first << ": " <<  t->second  << '\n';
 
}

Мне хотелось решить вашу задачу именно таким способом.
0
Somebody
2799 / 1610 / 251
Регистрация: 03.12.2007
Сообщений: 4,211
Завершенные тесты: 3
29.04.2015, 20:03 #4
Вот ещё немного изменённый вариант:
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
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <string>
#include <utility>
#include <vector>
 
struct TeamScore : std::pair<std::string, int>
{
    using std::pair<std::string, int>::pair;
    static bool ScoreGreater(const TeamScore& a, const TeamScore& b)
    {
        return a.second > b.second;
    }
};
 
std::istream& operator>>(std::istream& is, TeamScore& x)
{
    return is >> std::ws >> x.first >> x.second;
    std::cout << x.first << ' ' << x.second << std::endl;
}
 
std::ostream& operator<<(std::ostream& os, const TeamScore& x)
{
    return os << x.first << ": " << x.second;
}
 
int main()
{
    std::string from, to;
    std::cin >> from >> to;
 
    std::ifstream in(from);
    std::ofstream out(to);
 
    std::vector<TeamScore> vctteams { std::istream_iterator<TeamScore>(in),
        std::istream_iterator<TeamScore>() };
    std::sort(vctteams.begin(), vctteams.end(), TeamScore::ScoreGreater);
    std::copy(vctteams.cbegin(), vctteams.cend(),
        std::ostream_iterator<TeamScore>(out, "\n"));
}
0
Aleks_Tret
9 / 9 / 13
Регистрация: 25.10.2014
Сообщений: 52
30.04.2015, 08:54 #5
Цитата Сообщение от Somebody Посмотреть сообщение
C++
1
using std::pair<std::string, int>::pair;
Это строчка возвращает ошибку - error C2886: 'pair<_Ty1,_Ty2>' : symbol cannot be used in a member using-declaration
Цитата Сообщение от Somebody Посмотреть сообщение
C++
1
std::vector<TeamScore> vctteams { std::istream_iterator<TeamScore>(in), std::istream_iterator<TeamScore>() };
В этой строке не хочет компилировать из за этого- std::istream_iterator<TeamScore>()
Переписал вот так:
C++
1
2
std::istream_iterator<TeamScore>eos;
std::vector<TeamScore> vctteams ( std::istream_iterator<TeamScore>(in),eos);
{ поменял на (.
IDE MVС++2010Express.
После компиляции не получил на выходе списка команд в файле. У вас, "в вашем компиляторе", код работает?
0
30.04.2015, 08:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2015, 08:54
Привет! Вот еще темы с решениями:

Как полю класса типа char* присвоить значение типа *char
Проблема в строчке 46 (не пинайте сильно за формат кода и за говнокод) ...

Добавление в массив типа char * одного элемента типа char
Дан класс Строка, содержащий указатель на char - адрес динамически выделенной...

Аргумент типа char** не совместим с параметром типа const char*
Программа должна позволять заносить в структуру данные и выводить на экран...

Аргумент типа char (*)[1000] несовместим с параметром типа char**
Здравствуйте! Есть вот такая структура: #define max 1000 struct expr {...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru