Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2013, 13:40   #1
zorra123
Пользователь
 
Регистрация: 23.11.2010
Сообщений: 23
По умолчанию помогите разобраться с сортировкой

дана структура (подобие записной книжки) требуется отсортировать массив, состоящий из этих структур по алфавиту. как это сделать?
P.S. я очень плохо понимаю функцию qsort, гуглил и читал не один раз, не понимаю. помогите разобраться как это сделать?


Код:
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
#include <iostream> 
using namespace std;
#pragma pack(push,1)
struct people
{
	char name[70];
	char surname[70];
	char otchestvo[70];
	int nomer;
};
#pragma pop
int compare(const void* p1,const void* p2)
{
   struct people*    pS1 = (struct people*)p1;
   struct people*    pS2 = (struct people*)p2;
   
   return strcmp(pS1->name,pS2->name);
}
int main(void)
{ 
	int d =0,c=1, k=0,x=0,n_u =1,n_a=0;
	FILE *in = fopen("c:/Temp/data.txt","r");
	if (in==NULL )
	{
		printf ("No file");
		return 1;
	}	
	people* mas = (people*)malloc(sizeof(people)*1);
	d = fscanf(in, "%s %s %s %i", mas[k].name, mas[k].surname, mas[k].otchestvo, &mas[k].nomer);
	while (d==4)
	{
		printf("%s %s %s %i\n", mas[x].name, mas[x].surname, mas[x].otchestvo,mas[x].nomer);
		x++;
		c++;
		if (n_u>=n_a)
		{
			if (people *mas2 = (people*)realloc(mas,sizeof(people)*2))
			{
				mas = mas2;
				n_a *=2;
			}
			else if (people *mas2 = (people*)realloc(mas,sizeof(people)+1))
			{
				mas = mas2;
				n_a++;
			}
		}
		d = fscanf(in,"%s %s %s %i", mas[x].name, mas[x].surname, mas[x].otchestvo,&mas[x].nomer);
	}
	qsort(mas, x, sizeof(people), compare);
	for(int i =0; i<2; i++)
	{
		printf("%s %s %s %i \n", mas[i].name, mas[i].surname, mas[i].otchestvo,&mas[i].nomer);
	}

	fclose(in);
	return 0;
}
zorra123 вне форума Ответить с цитированием
Старый 16.10.2013, 15:20   #2
zorra123
Пользователь
 
Регистрация: 23.11.2010
Сообщений: 23
По умолчанию

вроде как фурычит
Код:
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
#include <iostream> 
using namespace std;

struct people
{
	char surname[70];
	char name[70];
	char otchestvo[70];
	int nomer;
};

int compare(const void* p1,const void* p2)
{
   struct people*    pS1 = (struct people*)p1;
   struct people*    pS2 = (struct people*)p2;
   if (pS1->surname!=pS2->surname)
   return strcmp(pS1->surname,pS2->surname);
   else 
   {
   struct people*    pS1 = (struct people*)p1;
   struct people*    pS2 = (struct people*)p2;
   
   if (pS1->name!=pS2->name)
   return strcmp(pS1->name,pS2->name);
   else
	   {
	   struct people*    pS1 = (struct people*)p1;
	   struct people*    pS2 = (struct people*)p2;
	   
	   return strcmp(pS1->otchestvo,pS2->otchestvo);
	   }
   }
}

int main(void)
{ 
	int d =0,c=1, k=0,x=0,n_u =0,n_a=1;
	FILE *in = fopen("c:/Temp/data.txt","r");
	if (in==NULL )
	{
		printf ("No file");
		return 1;
	}	
	people* mas = (people*)malloc(sizeof(people)*1);
	
	for (;;)
		{

			if (n_u>=n_a)
			if (people *mas2 = (people*) realloc(mas, sizeof(people)*(n_a*2)))
			{ 
				mas=mas2;
				n_a*=2;
			}

			else if (people *mas2 = (people*) realloc(mas, sizeof(people)*(n_a+1)))
			{ 
				mas=mas2;
				n_a++;
			}

			if (fscanf(in, "%20s %20s %20s %i", mas[n_u].surname, mas[n_u].name, mas[n_u].otchestvo, &mas[n_u].nomer) == 4)
				n_u++;

			else
			break;
		}

	qsort(mas, n_u, sizeof(people), compare);
	for(int i =0; i<n_u; i++)
	{
		printf("%s %s %s %i \n", mas[i].surname, mas[i].name, mas[i].otchestvo,mas[i].nomer);
	}

	fclose(in);
	return 0;
}
zorra123 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с сортировкой файла Taisja Помощь студентам 0 17.12.2009 23:44
помогите с сортировкой... DIzza Паскаль, Turbo Pascal, PascalABC.NET 3 16.06.2009 00:46
Помогите с сортировкой maxic Microsoft Office Excel 5 21.02.2009 17:47