Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] MFC. Сортировка CStringArray.


Автор: atomlex 27.12.2009, 20:23
Не получается сделать чтение и сортировку текста из файла.

Код


/*
 * Требуемые опции компилятора: /MT
 */ 

#include <afx.h>
#include <iostream.h>
#include <afxcoll.h>

class CSortStringArray : public CStringArray {
public:
   void Sort();
private:
   BOOL CompareAndSwap(int pos);
};
void CSortStringArray::Sort()
{
   BOOL bNotDone = TRUE;

   while (bNotDone)
   {
      bNotDone = FALSE;
      for(int pos = 0;pos < GetUpperBound();pos++)
         bNotDone |= CompareAndSwap(pos);
   }
}
BOOL CSortStringArray::CompareAndSwap(int pos)
{
   CString temp;
   int posFirst = pos;
   int posNext = pos + 1;

   if (GetAt(posFirst).CompareNoCase(GetAt(posNext)) > 0)
   {
      temp = GetAt(posFirst);
      SetAt(posFirst, GetAt(posNext));
      SetAt(posNext, temp);
      return TRUE;

   }
   return FALSE;
}
void main()
{
    {
CFile file;
char pbuf[512];
int z = file.Read(pbuf, sizeof(pbuf));
pbuf [z] = '\0';
file.Close();
    }

   CSortStringArray sortArray;
   CString(z);
sortArray.Add(CString(z));

/*
   sortArray.Add(CString("Zebra"));
   sortArray.Add(CString("Bat"));
   sortArray.Add(CString("Apple"));
   sortArray.Add(CString("Mango"));
*/

   for (int i = 0; i <= sortArray.GetUpperBound(); i++)
      cout << sortArray[i] << endl;

   sortArray.Sort();
   cout << endl;

   for (int j = 0; j <= sortArray.GetUpperBound(); j++)
      cout << sortArray[j] << endl;



Автор: mes 28.12.2009, 02:09
Цитата(atomlex @  27.12.2009,  19:23 Найти цитируемый пост)
Не получается сделать чтение и сортировку текста из файла.

ну и ? что не получается ? или Вы предлагаете форумчанам бросить все дела и броситься дружно изучать Ваш код с целью выявления Ваших трудностей ?!
побольше конкретики, экономьте чужое время и силы - это в Ваших же интересах.




Автор: xvr 28.12.2009, 16:44
У вас нет функции сортировки. А то, что есть - это бред, а не сортировка.  smile 

Автор: atomlex 28.12.2009, 20:31
Цитата(xvr @ 28.12.2009,  16:44)
У вас нет функции сортировки. А то, что есть - это бред, а не сортировка.  smile

Я догадывался, что там чего-то не хватает smile 
Конкретные замечания есть какие-нибудь?)
Буду очень признателен.

P.S. Слова сортирутс, если они заданы в самом коде, т.е. :
Код

#include <afx.h>
#include <iostream.h>
#include <afxcoll.h>

class CSortStringArray : public CStringArray {
public:
   void Sort();
private:
   BOOL CompareAndSwap(int pos);
};
void CSortStringArray::Sort()
{
   BOOL bNotDone = TRUE;

   while (bNotDone)
   {
      bNotDone = FALSE;
      for(int pos = 0;pos < GetUpperBound();pos++)
         bNotDone |= CompareAndSwap(pos);
   }
}
BOOL CSortStringArray::CompareAndSwap(int pos)
{
   CString temp;
   int posFirst = pos;
   int posNext = pos + 1;

   if (GetAt(posFirst).CompareNoCase(GetAt(posNext)) > 0)
   {
      temp = GetAt(posFirst);
      SetAt(posFirst, GetAt(posNext));
      SetAt(posNext, temp);
      return TRUE;

   }
   return FALSE;
}
void main()
{
   CSortStringArray sortArray;

   sortArray.Add(CString("Zebra"));
   sortArray.Add(CString("Bat"));
   sortArray.Add(CString("Apple"));
   sortArray.Add(CString("Mango"));

   for (int i = 0; i <= sortArray.GetUpperBound(); i++)
      cout << sortArray[i] << endl;

   sortArray.Sort();
   cout << endl;

   for (int j = 0; j <= sortArray.GetUpperBound(); j++)
      cout << sortArray[j] << endl;


Автор: xvr 28.12.2009, 21:16
Слова я видел, сортировки я не видел  smile Сортировка подразумевает наличие либо 2х вложенных циклов, либо цикла и рекурсии. 

Отбой - 2 цикла есть. И сортировка есть (пузырек)

А вот ввода из файла нет, точнее все вводится в виде 1й большой строки. Смысла сортировать массив из 1го элемента лично я не вижу  smile 

Автор: atomlex 28.12.2009, 22:00
У меня задание - прочитать слова из файла, отсортировать их по алфавиту, записать в новый файл.Вот и пытаюсь что-то сделать..
Так как сделать ввод из файла..?

Автор: Earnest 29.12.2009, 08:19
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)