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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
#1

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

01.12.2012, 20:59. Просмотров 800. Ответов 19
Метки нет (Все метки)

Нужно отсортировать по 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++
struct Books { char *Nazvan; //название книги char *Name_avtor; //автор int Yaer_izd; // год издания ...

Как отсортировать структуру? - C++
В чем здесь ошибка? Нужно записать во второй файл структуру, отсортированную по параметру number. #include &quot;stdafx.h&quot; #include...

Как отсортировать по алфавиту структуру - C++
Здравствуйте, мальчики. Я делала программу, которая содержит прайс лист: -названия товара -название магазина -стоимость Необходимо...

Как отсортировать структуру по убыванию - C++
#include &lt;iostream&gt; #include &lt;clocale&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; using namespace std; int main() { ...

Как отсортировать структуру с полями string по алфавиту - C++
Народ выручайте!!!! Нужно сделать сортировку по полю string Fname(по фамилии), всё сделал только это осталось!!! Метод или пример, хоть...

отсортировать структуру - C++
Всем привет, вот такой вопрос, не получается правильно отсортировать следующую структуру по z координате vector&lt;Quaternion&gt;q; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zss
Модератор
Эксперт С++
6361 / 5925 / 1921
Регистрация: 18.12.2011
Сообщений: 15,231
Завершенные тесты: 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
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
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
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
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
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
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
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
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
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
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
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2012, 23:25
Привет! Вот еще темы с ответами:

Отсортировать структуру - C++
Задание такое Описать структуру с именем Train содержащую следующие поле. nazn-название пункта назначения numr -номер поезда ...

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

Отсортировать структуру по алфавиту - C++
Вообще задание такое: Описать структуру с именем STUDENT, содержащую следующие поля: 1)фамилия и инициалы; 2)номер группы; ...

Stl отсортировать структуру - C++
вообщем есть задача: Написать функцию, которая читает данные о ноутбуках из файла note.txt в структуру приведенного вида. Написать...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.12.2012, 23:25
Ответ Создать тему
Опции темы

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