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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 81, средняя оценка - 4.81
m1x
5 / 5 / 0
Регистрация: 20.11.2010
Сообщений: 173
#1

Сортировка данных в структуре - C++

23.05.2011, 19:13. Просмотров 12435. Ответов 7
Метки нет (Все метки)

Написал код для структуры, содержащей список фамилий, имен, номеров телефона, дней рождения
Нужно сортировать список по номеру телефона
как это сделать?

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 <iostream>
#include <conio.h>
#include <math.h>
#include <string.h>
 
 
using namespace std;
 
 
struct NOTE {
    char surname[20]; 
    char name[10]; 
    int phone;
    char birthday[10]; 
} ;
 
void main () 
{
     NOTE base[4];
int i,j;
for(i=0; i<4;i++) { 
    cout<<"\nSurname: ";
    cin>>base[i].surname;
    cout<<"\nName: ";
    cin>>base[i].name;
    cout<<"\nPhone: ";
    cin>>base[i].phone;
    cout<<"\nBirthday: ";
    cin>>base[i].birthday;
}
    
 
for(i=0; i<4;i++) { 
    cout<<"Surname: "<<base[i].surname<<" Name: "<<base[i].name<<" Phone: "<<base[i].phone<<" Birthday: "<<base[i].birthday<<endl;
 
}
system("Pause");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2011, 19:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка данных в структуре (C++):

Сортировка данных в Структуре С++ - C++
Доброго времени суток, дорогие форумчане! Возникла следующая проблема. Нужно отсортировать структуру по полю типа int Сама...

Сортировка в линейной структуре данных - C++
Данные хранятся в бинарном файле записей, а для обработки считываются в связанный список. При выходе из программы обработанные данные...

Сортировка и поиск данных в структуре - C++
Имеется структура данных: название института, номер корпуса, название кафедры и телефон кафедры. Требуется реализовать поиск по 3-м...

Сортировка в структуре - C++
Нужно создать структуру, вбить туда инфу: имя, факультет, группа, пропусков. вывести список у кого больше пропусков (отсортировать пожалуй,...

Сортировка в структуре - C++
По заданию нужно ввести данные в структуре, отсортировать по цене (от наименьшей к наибольшей) и вывести. На сортировке засыпался, прошу...

Сортировка в структуре - C++
Структура: struct Worker { string Name; int Year; status Status; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
-comrade-
355 / 356 / 42
Регистрация: 11.06.2010
Сообщений: 703
23.05.2011, 19:17 #2
m1x, выбираете один из методов сортировки. И сортируете по полю
C++
1
base.phone
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
23.05.2011, 19:20 #3
Или так
C++
1
2
3
4
5
6
7
8
9
struct NOTE {
        char surname[20]; 
        char name[10]; 
        int phone;
        char birthday[10]; 
        bool operator< (const NOTE& a) const{
          return phone < a.phone;
        }
} ;
И потом тупо
std::sort, только лучше вместо массива вектор использовать
Серега 11.09
-37 / 0 / 0
Регистрация: 30.04.2011
Сообщений: 10
23.05.2011, 20:46 #4
спасибо за помошь
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
25.05.2011, 19:14 #5
C
1
2
3
4
5
int cmp(const void* a, const void* b) {
    return ((NOTE*)a)->phone-((NOTE*)b)->phone;
}
 
    qsort(base,4,sizeof(base[0]),cmp);
вот тебе на С
Серега 11.09
-37 / 0 / 0
Регистрация: 30.04.2011
Сообщений: 10
25.05.2011, 19:19 #6
спасибо тебе.....
zhvaka
0 / 0 / 0
Регистрация: 29.01.2011
Сообщений: 40
20.09.2011, 17:41 #7
Здравствуйте, не подскажите как сделать qsort сортировку по дате рождения ?
Пузырём это выглядит примерно так
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int BigDate1, BigDate2, i, j;
            NOTE temp;
        for(i=0;i<N-1;i++)
    {
        for(j=0;j<N-1;j++)
        {
            BigDate1 = BN[j].BDAY[2]*10000 + BN[j].BDAY[1]*100 + BN[j].BDAY[0];
            BigDate2 = BN[j+1].BDAY[2]*10000 + BN[j+1].BDAY[1]*100 + BN[j+1].BDAY[0];
            if(BigDate1 > BigDate2)
            {
                        temp=BN[j];
                        BN[j]=BN[j+1];
                        BN[j+1]=temp;
            }
        }
Nameless One
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
20.09.2011, 17:45 #8
zhvaka, смотри документацию по qsort:
Код
QSORT(3)                                                                  Руководство программиста Linux                                                                  QSORT(3)



ИМЯ
       qsort - сортировка массива

ОБЗОР
       #include <stdlib.h>

       void qsort(void *base, size_t nmemb, size_t size,
                  int(*compar)(const void *, const void *));

ОПИСАНИЕ
       Функция qsort() сортирует массив из nmemb размером size. Аргумент base указывает на начало массива.

       Содержимое  массива  сортируется в соответствии с функцией сравнения, на которую ссылается compar, вызываемой вместе с двумя аргументами, которые ссылаются на сравниваемые
       объекты.

       Функция сравнения должна вернуть целое, меньшее, равное и большее нуля для случаев, когда первый аргумент  меньше,  равен  или  больше  второго  соответственно.  Если  оба
       элемента сравнения равны, порядок их сортировки в массиве не будет определен.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
       Функция qsort() ничего не возвращает.

СООТВЕТСТВИЕ СТАНДАРТАМ
       SVr4, 4.3BSD, C89, C99.

ЗАМЕЧАНИЯ
       Для  использования  compar  подходят  библиотечные  процедуры, включая alphasort(3) и versionsort(3). Для сравнения C-строк в качестве функции сравнения можно использовать
       strcmp(3), как это указано ниже.

ПРИМЕР
       Для примера использования смотрите пример, указанный в bsearch(3).

       Еще один пример программы, сортирующей строки, переданные в качестве аргументов через командную строку:

       #include <stdio.h>
       #include <stdlib.h>
       #include <string.h>

       static int
       cmpstringp(const void *p1, const void *p2)
       {
           /* Аргументами данной функции являются "pointers to
              pointers to char", однако аргументами strcmp(3)
              являются "pointers to char", так что здесь происходит
              преобразование и разыменовывание ссылок */

           return strcmp(* (char * const *) p1, * (char * const *) p2);
       }

       int
       main(int argc, char *argv[])
       {
           int j;

           if (argc < 2) {
            fprintf(stderr, "Usage: %s <string>...\n", argv[0]);
            exit(EXIT_FAILURE);
           }

           qsort(&argv[1], argc - 1, sizeof(char *), cmpstringp);

           for (j = 1; j < argc; j++)
               puts(argv[j]);
           exit(EXIT_SUCCESS);
       }

СМОТРИТЕ ТАКЖЕ
       sort(1), alphasort(3), strcmp(3), versionsort(3)



                                                                                    2009-09-15                                                                            QSORT(3)
Тебе нужно реализовать функцию-компаратор, которая принимает два нетипизированных указателя на объекты твоей структуры и должна возвращать отрицательное число, если первый объект меньше второго, 0, если они равны, и положительное число, если первый объект больше второго. Естественно, перед непосредственным сравнением нужно скастовать указатели к соответствующим типам. Выше есть пример.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2011, 17:45
Привет! Вот еще темы с ответами:

Сортировка в структуре - C++
Надо отсоритровать структуру по параметру &quot;Телефон&quot; Листал форум, вроде все написано правильно, сортировку делаю &quot;пузырьком&quot;, но выводит...

Сортировка в структуре - C++
Нужно считать в структуру информацию из файла, и отсортировать по зарплате. В файле записана информацию: Имя, год рождения, и зарплата. Со...

Сортировка по фамилии в структуре - C++
Посмотрите пожалуйста структуру Студент! Нужно сделать сортировку по фамилии.Думаю, что с функцией strcmp что-то не так... Задание:...

Сортировка string по алфавиту в структуре - C++
Итак, задача считать информацию из файла, в формате string\t char\t int\n и отсортировать в алфавитном порядке по первому значению в строке...


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

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

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