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

Как отсортировать структуру? - C++

Восстановить пароль Регистрация
 
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
01.12.2012, 20:59     Как отсортировать структуру? #1
Нужно отсортировать по number, и записать в новый файл.

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
#include "stdafx.h"
#include <fstream>
#include <stdlib.h>
 
using namespace std;
 
void main ()
{
        struct MARSH
            {
              char start[20], finish[20];
              unsigned number;
            };
MARSH a[8];
ifstream f("bd.txt");
ofstream f2("bd2.txt");
for(int i=0;i<8;i++)
{
char p[3];
f.getline(p,3);
a[i].number=atoi(p);
f.getline(a[i].start,20);
f.getline(a[i].finish,20);
}
f.close();
 
/*int tmp;
 for(int i=0;i<8;i++)
        for(int j=0;j<8;j++)
        {
            if(a[i].number<a[i+1].number)
            {
                tmp=a[i].number;
                a[i].number=a[j].number;
                a[j].number=tmp;
            }
        }*/
 
for (int i=0;i<8;i++)
    f2<<a[i].number<<" "<<a[i].start<<" - "<<a[i].finish<<endl;
 
f2.close();
}

Пример файла bd

21
Moscow
New York
12
Paris
London
72
Astrakhan
Volgograd
13
Berlin
Milan
23
Tol'yati
ST Petersburg
69
Washington
Munchen
73
Sydney
Tokio
37
Gavanna
Pekin
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2012, 20:59     Как отсортировать структуру?
Посмотрите здесь:

Как отсортировать структуру? C++
отсортировать структуру C++
C++ Отсортировать структуру
C++ Как отсортировать структуру
Stl отсортировать структуру C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5946 / 5551 / 1784
Регистрация: 18.12.2011
Сообщений: 14,179
Завершенные тесты: 1
01.12.2012, 21:04     Как отсортировать структуру? #2
C++
1
2
3
4
5
6
if(a[i].number<a[i+1].number)
{
        MARSH tmp=a[i];
        a[i]=a[j];
        a[j]=tmp;
 }
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
01.12.2012, 21:06     Как отсортировать структуру? #3
Можно с помощью swap
Diemon
17 / 5 / 2
Регистрация: 13.09.2011
Сообщений: 24
01.12.2012, 21:07     Как отсортировать структуру? #4
C++
1
2
3
4
5
6
7
8
9
//...
#include <algorithm>
//...
 
if(a[i].number<a[i+1].number){
 
        std::swap(a[i],a[i+1]);
 
}
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
01.12.2012, 22:13  [ТС]     Как отсортировать структуру? #5
zss,
что то неправильно сортирует
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 "stdafx.h"
#include <fstream>
#include <stdlib.h>
 
using namespace std;
 
void main ()
{
        struct MARSH
            {
              char start[20], finish[20];
              unsigned number;
            };
MARSH a[8];
ifstream f("bd.txt");
ofstream f2("bd2.txt");
for(int i=0;i<8;i++)
{
char p[3];
f.getline(p,3);
a[i].number=atoi(p);
f.getline(a[i].start,20);
f.getline(a[i].finish,20);
}
f.close();
 
 for(int i=0;i<8;i++)
        for(int j=0;j<8;j++)
        {
            if(a[i].number<a[i+1].number)
{
        MARSH tmp=a[i];
        a[i]=a[j];
        a[j]=tmp;
 }
        }
 
for (int i=0;i<8;i++)
    f2<<a[i].number<<" "<<a[i].start<<" - "<<a[i].finish<<endl;
 
f2.close();
}
bd:

21
Moscow
New York
12
Paris
London
72
Astrakhan
Volgograd
13
Berlin
Milan
23
Tol'yati
ST Petersburg
69
Washington
Munchen
73
Sydney
Tokio
37
Gavanna
Pekin


bd2:

37 Gavanna - Pekin
69 Washington - Munchen
23 Tol'yati - ST Petersburg
13 Berlin - Milan
12 Paris - London
21 Moscow - New York
73 Sydney - Tokio
72 Astrakhan - Volgograd
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
01.12.2012, 22:14     Как отсортировать структуру? #6
Цитата Сообщение от delexa Посмотреть сообщение
что то неправильно сортирует
выложи весь код с учётом сортировки
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
01.12.2012, 22:25  [ТС]     Как отсортировать структуру? #7
David Sylva, выше привел. как то странно сортирует
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
01.12.2012, 22:32     Как отсортировать структуру? #8
Цитата Сообщение от delexa Посмотреть сообщение
David Sylva, выше привел. как то странно сортирует
Используй swap и не парься.
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
01.12.2012, 22:39  [ТС]     Как отсортировать структуру? #9
David Sylva,
ошибка при звершении программы и неправильно сортирует

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
#include "stdafx.h"
#include <fstream>
#include <stdlib.h>
#include <algorithm>
 
using namespace std;
 
void main ()
{
        struct MARSH
            {
              char start[20], finish[20];
              unsigned number;
            };
MARSH a[8];
ifstream f("bd.txt");
ofstream f2("bd2.txt");
for(int i=0;i<8;i++)
{
char p[3];
f.getline(p,3);
a[i].number=atoi(p);
f.getline(a[i].start,20);
f.getline(a[i].finish,20);
}
f.close();
 
 for(int i=0;i<8;i++)
        for(int j=0;j<8;j++)
        {
        if(a[i].number<a[i+1].number){
        swap(a[i],a[i+1]);
        }
        }
for (int i=0;i<8;i++)
    f2<<a[i].number<<" "<<a[i].start<<" - "<<a[i].finish<<endl;
 
f2.close();
}
вот так получается

bd2:

21 Moscow - New York
72 Astrakhan - Volgograd
13 Berlin - Milan
23 Tol'yati - ST Petersburg
69 Washington - Munchen
73 Sydney - Tokio
37 Gavanna - Pekin
1497538860 ММММЬ®BYшм - шм

ошибка

Кликните здесь для просмотра всего текста
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
01.12.2012, 22:42     Как отсортировать структуру? #10
Как звучит условие задачи?

Не по теме:

void main писать нельзя

delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
01.12.2012, 22:49  [ТС]     Как отсортировать структуру? #11
David Sylva, дана структура MARSH, содержащая 8 записей. Каждая запись состоит из номера, названия начального пункта маршрута и названия конечного пункта маршрута . Нужно отсортировать по номеру и записать в новый файл записи.
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
01.12.2012, 23:14     Как отсортировать структуру? #12
Сейчас тебе набросаю с использованием swap.

Добавлено через 11 минут
delexa Сейчас стал делать и наткнулся на такую ошибку, тебя не смущает что не которые города с двойным названием?
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
01.12.2012, 23:18  [ТС]     Как отсортировать структуру? #13
David Sylva, Пока разбираюсь еще толком не знаю, как getline считывает. Тогда пробел на _ можно заменить.
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
01.12.2012, 23:19     Как отсортировать структуру? #14
Цитата Сообщение от delexa Посмотреть сообщение
David Sylva, Пока разбираюсь еще толком не знаю, как getline считывает. Тогда пробел на _ можно заменить
Может быть у тебя из-за этого возникали ошибки.
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
01.12.2012, 23:25  [ТС]     Как отсортировать структуру? #15
David Sylva,
Исправил бд на

21
Moscow
New_York
12
Paris
London
72
Astrakhan
Volgograd
13
Berlin
Milan
23
Tol'yati
ST_Petersburg
69
Washington
Munchen
73
Sydney
Tokio
37
Gavanna
Pekin

Все также. Если изза этого, тогда странно, что работает нормально просто чтение структуры и запись ее в новый файл:

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
#include "stdafx.h"
#include <fstream>
#include <stdlib.h>
#include <algorithm>
 
using namespace std;
 
void main ()
{
        struct MARSH
            {
              char start[20], finish[20];
              unsigned number;
            };
MARSH a[8];
ifstream f("bd.txt");
ofstream f2("bd2.txt");
for(int i=0;i<8;i++)
{
char p[3];
f.getline(p,3);
a[i].number=atoi(p);
f.getline(a[i].start,20);
f.getline(a[i].finish,20);
}
f.close();
 
 
for (int i=0;i<8;i++)
    f2<<a[i].number<<" "<<a[i].start<<" - "<<a[i].finish<<endl;
 
f2.close();
}
bd

21
Moscow
New York
12
Paris
London
72
Astrakhan
Volgograd
13
Berlin
Milan
23
Tol'yati
ST Petersburg
69
Washington
Munchen
73
Sydney
Tokio
37
Gavanna
Pekin


bd2

21 Moscow - New York
12 Paris - London
72 Astrakhan - Volgograd
13 Berlin - Milan
23 Tol'yati - ST Petersburg
69 Washington - Munchen
73 Sydney - Tokio
37 Gavanna - Pekin
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
01.12.2012, 23:28     Как отсортировать структуру? #16
Вот такой вариант
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
#include <iostream> 
#include <fstream> 
#include <algorithm>
#include <string>
 
struct MARSH 
{ 
    std::string start; 
    std::string finish; 
    int number; 
}; 
 
int main() 
{   
    const int size = 8;
    MARSH mar[size];  
    MARSH temp;
    int i, j, count = 0;
    std::ifstream infile; 
    infile.open("Text.txt");  
 
    if(!infile.is_open()) 
        std::cout << "Error " << std::endl; 
    else 
        while(!infile.eof())  
            for ( i = 0; i < size; ++i) 
                infile >> mar[i].number >> mar[i].start >> mar[i].finish; 
 
    for ( i = 0; i < size; ++i) 
            for ( j = 0; j < size; ++j) 
                if( mar[j].number > mar[j+1].number) 
                { 
                    std::swap(temp, mar[j]); 
                    std::swap(mar[j], mar[j+1]); 
                    std::swap(mar[j+1], temp); 
                } 
     
 
    std::ofstream outfile("Asd.txt"); 
    for ( i = 0; i < size; ++i) 
        outfile << mar[i].number << " " << mar[i].start << " " << mar[i].finish << std::endl; 
    infile.close(); 
    outfile.close();
}
Добавлено через 34 секунды
Текстовый файл такой
21 Moscow New_York
12 Paris London
72 Astrakhan Volgograd
13 Berlin Milan
23 Tolyati ST_Petersburg
69 Washington Munchen
73 Sydney Tokio
37 Gavanna Pekin
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
01.12.2012, 23:34  [ТС]     Как отсортировать структуру? #17
David Sylva, ошибка построения

Кликните здесь для просмотра всего текста
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
01.12.2012, 23:38     Как отсортировать структуру? #18
delexa Студия какого года?
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
01.12.2012, 23:39  [ТС]     Как отсортировать структуру? #19
David Sylva, 2012
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2012, 23:41     Как отсортировать структуру?
Еще ссылки по теме:

C++ Отсортировать структуру по алфавиту
C++ Отсортировать структуру
C++ Как отсортировать структуру с полями string по алфавиту

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

Или воспользуйтесь поиском по форуму:
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
01.12.2012, 23:41     Как отсортировать структуру? #20
Цитата Сообщение от delexa Посмотреть сообщение
David Sylva, 2012
Так и думал.Не знаю что тебе сказать, я сам пользуюсь 10 студией.На 10 всё работает отлично.
Yandex
Объявления
01.12.2012, 23:41     Как отсортировать структуру?
Ответ Создать тему
Опции темы

Текущее время: 15:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru