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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2009, 23:16   #1
Anarki
Пользователь
 
Аватар для Anarki
 
Регистрация: 13.09.2009
Сообщений: 29
Вопрос Сортировка строк по алфавиту в структуре с помощью указателей

Требуется отсортировать строки по алфавиту в структуре с помощью указателей. Написал программу, но сортировка получается не понятна. В чем может быть ошибка ?
Код:
struct knigi
{
   char name [20];
};
int main ()
{
   knigi *m[5];
   int i,n;
   char *temp;
   m[5]=(knigi*)malloc(5);
   clrscr ();
   printf ("\n Vvedite kolichestvo knig :\n\n n=");
   scanf ("%d",&n);
   for (i=0; i<n; i++)
   {
      printf ("\n Nazvanie knigi - ",i+1);
      scanf ("%s",&m[i]->name);
   }
   for (i=0; i<n; i++)
   {
      if (strcmp(m[i]->name,m[i+1]->name)>0)
      {
	 strcpy (temp,m[i]->name);
	 strcpy (m[i]->name,m[i+1]->name);
	 strcpy (m[i+1]->name,temp);
	 i=0;
      }
   }
   for (i=0; i<n; i++)
   {
      printf ("\n %s",m[i]->name);
   }
   free (m);
   getch ();
   return 0;
}
Вывод программы:
Цитата:
Vvedite kolichestvo knig:
n=5
Nazvanie knigi - bcc
Nazvanie knigi - dcc
Nazvanie knigi - gcc
Nazvanie knigi - acc
Nazvanie knigi - ecc

bcc
acc
dcc
ecc
gcc
Anarki вне форума Ответить с цитированием
Старый 23.10.2009, 01:39   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Хотите сказать, что это у вас еще и работало?

Массив объявляется неправильно. Память под него выделяется также неверно.
Указатель temp объявлен, но используется в дальнейшем опять же без всякого выделения места.
Сама сортировка тоже сделана неправильно.

Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

struct knigi
{
   char name [20];
};

int main ()
{
   knigi *m;
   int i,n,j;
   char *temp;
   printf ("\n Vvedite kolichestvo knig :\n\n n=");
   scanf ("%d",&n);
   
   m=(knigi*)malloc(n*sizeof(knigi));
   temp = (char*)malloc(20*sizeof(char));
   
   for (i=0; i<n; i++)
   {
      printf ("\n Nazvanie knigi - ",i+1);
      scanf ("%s",&m[i].name);
   }
   for (i=0; i<n-1; i++)
   {
    for(j=i; j<n; ++j)
     if (strcmp(m[j].name,m[i].name)<0)
      {
       strcpy (temp,m[i].name);
       strcpy (m[i].name,m[j].name);
       strcpy (m[j].name,temp);
      }
   }

   for (i=0; i<n; i++)
   {
      printf ("\n %s",m[i].name);
   }
   free (m);
   free(temp);
   getch ();
   return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 23.10.2009, 19:36   #3
Anarki
Пользователь
 
Аватар для Anarki
 
Регистрация: 13.09.2009
Сообщений: 29
По умолчанию

Это просто кусок программы, поэтому меня интересовал просто алгоритм сортировки, остальное особо не мешало.
Вчера сделал сортировку так:
Код:
for (i=1; i<n; i++)
{
   if (strcmp(m[i-1]->name,m[i]->name)>0)
   {
      strcpy (temp,m[i-1]->name);
      strcpy (m[i-1]->name,m[i]->name);
      strcpy (m[i]->name,temp);
      i=0;
   }
}
Спасибо за выделение памяти ! Именно это я правильно не сделал =)
Anarki вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка по алфавиту Cpluser Общие вопросы C/C++ 7 03.03.2010 10:11
сортировка по алфавиту на си++ Craz Помощь студентам 2 01.10.2009 23:33
Сортировка массива указателей Джед Общие вопросы C/C++ 3 02.06.2009 14:18
Сортировка по алфавиту ЧИЖ Общие вопросы Delphi 1 16.03.2007 14:17