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

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

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

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

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

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

Задание (Borland C++ 3.1):
Выполнить сортировку массива строк по убыванию длины первого слова.
Цитата:
Для ускорения этой операции обычно используется дополнительный массив указателей. В этом случае вместо перестановки двух строк с помощью функции strcpy() используется перестановка указателей обычным присваиванием.
Не совсем понятно как сделать сортировку обычным присваиванием с помощью указателей.
Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>

int ls,ds,i,j,k,mn,n;
char st[10][30],stt;

int vvod ()
{
   printf ("\n vvedite kolichestvo strok :\n\n n=");
   scanf ("%d",&n);
   fflush (0);
   for (i=0; i<n; i++)
   {
      printf ("\n %d: ",i);
      gets (st[i]);
   }
   return 0;
}
int main ()
{
   clrscr ();
   vvod ();
   mn=strlen (st[0]);
   for (j=0; j<n; j++)
   {
      ls=strlen (st[j]);
      for (i=0; i<ls+1; i++)
      {
	 if (st[j][0+i]==' ')
	 {
	    ds=i;
	    break;
	 }
	 else
	    ds=i;
      }
      if (ds<mn)
      {
	 mn=ds;
	 k=j;
	 /*stt=st[j-1][30];
	 st[j-1][30]=st[j][30];      //Что то в этом роде
	 st[j][30]=stt;*/
      }
      printf ("\n stroka #%d dlinna 1 slova : %d \n",j,ds);
   }
   printf ("\n stroka #%d minimalnoe slovo : %d",k,mn);
   getch ();
   return 0;
}
Программа не доработана, но это не важно. Меня интересует как объявить этот массив указателей и как его использовать для сортировки строк.
Anarki вне форума Ответить с цитированием
Старый 19.09.2009, 19:35   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Честно говоря лень было до конца разбираться с вашим способом сортировки, потому написал по-своему. Способ сортировки не очень эффективный(медленный), но работает, коли будет желание - переделаете как Вам нравится.
Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

int n;
char *st[10], *stt; // Объявляем массив указателей на тип char и переменную, для временного
// хранения указателя при обмене значениями

int vvod()
{
	int i;

   printf ("\n vvedite kolichestvo strok :\n\n n=");
   scanf ("%d",&n);
   fflush (stdin); 
   for (i=0; i<n; i++)
   {
      printf ("\n %d: ",i);
	  st[i] = (char*)malloc(30); // Выделяем память под строку и сохраняем указатель на неё в массив
      gets (st[i]);
   }
   return 0;
}

int get_first_word_len(char* string)
{
	int word_len = 0;
	int string_len = strlen(string);
	int i;

	for(i = 0; i < string_len; i++) {
		if(string[i] == ' ')
			break;
		word_len++;
	}

	return word_len;
}

void sort()
{
	int i, j, k;

	for(i = 1; i < n; i++) {
		j = get_first_word_len(st[i-1]); // Получаем длину первой строки(первого слова)
		k = get_first_word_len(st[i]); // Получаем длину второй строки(первого слова)
		if(j > k) { // Если первая длиннее 
			stt = st[i-1];  // то меняем их местами...
			st[i-1] = st[i];
			st[i] = stt;
			i = 0; // И сбрасываем счётчик на ноль, дабы он снова проехался по всем элементам 
		}
	}

	return;
}


int main()
{
	int i;

	vvod();
	sort();

	for(i = 0; i < n; i++)
		printf("\n stroka #%d: %s", i+1, st[i]);

	getch();
	return 0;
}

Последний раз редактировалось netrino; 19.09.2009 в 19:43.
netrino вне форума Ответить с цитированием
Старый 19.09.2009, 20:06   #3
Anarki
Пользователь
 
Аватар для Anarki
 
Регистрация: 13.09.2009
Сообщений: 29
По умолчанию

netrino спасибо вам
Anarki вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка строк pascal Алексеййй Помощь студентам 19 06.05.2009 12:33
сортировка строк матрицы aurora_87 Общие вопросы C/C++ 3 23.04.2009 12:29
Сортировка строк в TStringGrid dimon000 Общие вопросы Delphi 6 03.07.2008 12:59
Сортировка строк sheva75 Microsoft Office Excel 3 06.02.2008 05:00