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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2011, 20:42   #1
CWD
Пользователь
 
Регистрация: 10.11.2009
Сообщений: 50
По умолчанию Сортировка не работает

Не работает сортировка, не могу исправить.
Код:
#include <iostream>

struct comp 
{
    char    Name[20],
            Author[20];
	int year;
    comp    *next;
};
struct DynamicList 
{
    comp    *head,
            *tail;
};

class Library 
{
    DynamicList l;

public:

    Library() 
	{
        l .head = 0;
    }
    void Add()
	{
        char Nam[20];
		char Aut[20];
		int yea;
        std ::cout << "Input the name of book: ";
        std ::cin >> Nam;
		std::cout << "Input the name of Author: ";
		std::cin >> Aut;
		std::cout << "Input the year: ";
		std::cin >> yea;

        comp *c = new comp( );

        strcpy_s( c ->Name, 20, Nam );
        strcpy_s( c ->Author, 10, Aut );
		c->year=yea;
        c ->next = NULL;

        if( 0 == l.head )
            l .head = l .tail = c;
        else
            l .tail = l .tail ->next = c;

    } 

    void Show ( ) 
	{
        comp *p = l .head;

        while ( p ) {
			std ::cout << p ->Name << " " << p ->Author << " " << p->year << std ::endl;
            p = p ->next;
        }
    }
	void Search()
	{
		char search[20];
		std::cout << "Input the name of Author: \n";
		std::cin >> search;
		int vybor=0;
		comp *p =l.head;
		vybor = 0;
		for(;;) 
		{
			std::cout << "1-By Author\n2-By NameofBook" << std::endl;
			std ::cin >> vybor;
			switch( vybor ) 
			{
				
				case 0:
				std::cout << "Input the name of Author: \n";
				std::cin >> search;
				while (p)
				{
					if (!strcmp(p->Author,search))
						std::cout << p->Name << " " << p->Author << std::endl;
					p=p->next;
				}
					break;
				case 1:
				std::cout << "Input the name Name of book: \n";
				std::cin >> search;
				while (p)
				{
					if (!strcmp(p->Name,search))
						std::cout << p->Name << " " << p->Author << std::endl;
					p=p->next;
				}
					break;
			}
		}
		
	}
	void Sort()
	{
		
		comp *p=l.head;
		char temp1[20];
		char temp2[20];
		bool j=true;
		while (j)
		{
			j=false;
			while (p->next)
			{
				if (strcmp(p->Author,(p->next)->Author)>0)
				{
					strcpy(temp1,p->Author);
					strcpy(p->Author,(p->next)->Author);
					strcpy((p->next)->Author,temp1);

					strcpy(temp2,p->Name);
					strcpy(p->Name,(p->next)->Name);
					strcpy((p->next)->Name,temp2);
					j=true;
				}
			
				p=p->next;
			}
		}
	}

};
int main( ) {
    Library            lol;
    int                vybor;

    vybor = 0;
    for(;;) 
	{
		std::cout << "1-ADD\n2-Show\n3-Search" << std::endl;
		std::cout << "4-Sort\n0-Exit" << std::endl;
        std ::cin >> vybor;
        switch( vybor ) 
		{
			
            case 0:
                return 0;
            case 1:
                lol .Add();
                break;
            case 2:
                lol .Show( );
                break;
				case 3:
				lol.Search();
                break;
				case 4:
					lol.Sort();
					break;
            default:
                std ::cout << "";
        }
    }
}
Буду очень благодарен если подскажите или покажите как исправить.
CWD вне форума Ответить с цитированием
Старый 19.09.2011, 20:41   #2
CWD
Пользователь
 
Регистрация: 10.11.2009
Сообщений: 50
По умолчанию

Неужели никто не знает?
CWD вне форума Ответить с цитированием
Старый 20.09.2011, 07:22   #3
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию

знают. копаться в таком коде ни у кого нет желания. вы бы еще целую библиотеку выложили и предложили поискать. выложите одну функцию со списком параметров нужных.
Kukurudza вне форума Ответить с цитированием
Старый 20.09.2011, 07:30   #4
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию

вот вам эффективная сортировка из стл если ваша задача не академическая

Код:
// sort.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <algorithm>
#include <iostream>
#include <windows.h>


int _tmain(int argc, _TCHAR* argv[])
{
	int massiv[] = { 23, 5, -10, 0, 0, 321, 1, 2, 99, 30 };
	int elements = sizeof(massiv) / sizeof(massiv[0]); 
	std::sort(massiv, massiv + elements);
	for (int i = 0; i < elements; ++i) 
	std::cout << massiv[i] << ' ';
	std::cout << "\n";
	system("pause");
	return 0;
}
и вообще, используйте для своей задачи стлвский вектор если возможно
std::vector<string> collection
Kukurudza вне форума Ответить с цитированием
Старый 21.09.2011, 16:57   #5
CWD
Пользователь
 
Регистрация: 10.11.2009
Сообщений: 50
По умолчанию

К большому сожалению, преподаватель хочет что бы все было через список, но мы этого почти не изучали.
CWD вне форума Ответить с цитированием
Старый 21.09.2011, 21:19   #6
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

В Sort() p инициализируется только в начале, а надо в цикле.
А если по-хорошему, то надо не строки местами менять, а элементы списка.
Somebody вне форума Ответить с цитированием
Старый 21.09.2011, 23:35   #7
CWD
Пользователь
 
Регистрация: 10.11.2009
Сообщений: 50
По умолчанию

Попробовал примитивный вариант из списка сделать массив, его отсортировать и обратно из массива сделать список. Но почему то оно не хочет обратно записывать массив в список. Ниже пробный вариант.
Код:
	void Sort()
	{
		char **str;
		str=new char *[30];
		char **str1;
		str1=new char *[1];
		int i=0;
		comp *p=l.head;
		while (p!=NULL)
		{
			str[i]=(p->Author);
			p=p->next;
			i++;
		}
		for (int j=0;j<i-1;j++)
		{
			if (strcmp(str[j],str[j+1])>0) 
			{
				str1[j]=str[j+1];
				str[j+1]=str[j];
				str[j]=str1[j];
			}
		}
		i=0;
		while (p!=NULL)
		{
			strcpy(p->Author,str[i]);
			i++;
			p=p->next;
		}
	}
CWD вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает быстрая сортировка Smusmumriken Общие вопросы C/C++ 4 12.06.2010 19:26
неправильно работает сортировка Brabus Помощь студентам 1 30.05.2010 14:25
Не работает сортировка Serzhi1 Общие вопросы C/C++ 16 25.12.2008 07:22
Плохо работает сортировка Lady_olga БД в Delphi 11 04.06.2008 23:10
TDBgridEh -не работает Сортировка adminhl БД в Delphi 0 01.04.2008 20:40