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

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

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

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

01.12.2012, 20:59. Просмотров 752. Ответов 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++
struct Books { char *Nazvan; //название книги char *Name_avtor; //автор int Yaer_izd; // год издания ...

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6290 / 5893 / 1911
Регистрация: 18.12.2011
Сообщений: 15,132
Завершенные тесты: 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
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
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
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
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++
Начал изучать структуры. Разобрался как вводить и выводить, но при попытке вывести через отдельную функцию не выводится первой символ....

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

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

Отсортировать динамический массив указателей на структуру (по номеру группы) - C++
Считайте все записи из файла &quot;6.dat&quot;. Для чтения каждой отдельной записи осуществите динамический захват памяти. Предполагается, что к-во...

Создать структуру, используя потоки заполнить масив структурами и отсортировать - C++
Помогите, никак не могу закончить програму. Как через поток записать существующие (записаные в файле данные) в масив? #include &lt;...


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

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

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