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


Автор: deadlegolas 12.11.2009, 14:10
Цитата

Распечатать слова текста, отсортированные в порядке убывания частоты ихнего появления (рядом выводить значение счетчика частоты появления)


Помогите с решением, вообщем понимаю как сделать, но написать не могу успеть к срокам. Спасибо большое!  smile 

Автор: zim22 12.11.2009, 14:18
какая версия Борланда? (эта информация поможет другим в случае если захотят взяться помочь)

Автор: deadlegolas 12.11.2009, 14:22
Ver. 3.1

Автор: t_gran 13.11.2009, 05:58
В общем старался сделать максимально проще и понятно, правда не знаю на сколько это у меня получилось. Программа считывает слова с указанного файла и уже потом проводит все требуемые операции.

Код

#include <iostream>
#include <fstream>
#include <vector>
#include <string>

using namespace std;

struct TStruct
{
   int count;
   string str;
};

typedef vector<TStruct> TArray;

//----------------------------------------------//
int LoadFromFile (TArray &theArr, const char *theFileName)
{
   ifstream f;
   f.open(theFileName);
   if (f.fail())
   {
      cout << "Error: can't open file '" << theFileName << "'" << endl;
      return 1;
   }
   string buffStr;
   while (!f.eof())
   {
      bool find= false;
      f >> buffStr;
      for (int i= 0; i < theArr.size(); ++i)
         if (theArr[i].str == buffStr)
         {
            theArr[i].count++;
            find= true;
         }
      if (!find)
      {
         TStruct append= {1, buffStr};
         theArr.push_back(append);
      }
   }
   f.close();
   return 0;
}
//----------------------------------------------//
void SortArray (TArray &theArr)
{
   for (int i= 0; i < theArr.size()-1; ++i)
      for (int j= i+1; j < theArr.size(); ++j)
         if (theArr[i].count < theArr[j].count)
         {
            TStruct buff= theArr[i];
            theArr[i]= theArr[j];
            theArr[j]= buff;
         }
}
//----------------------------------------------//
void PrintArray (const TArray &theArr)
{
   for (int i= 0; i < theArr.size(); ++i)
      cout << theArr[i].count << "\t" << theArr[i].str << endl;
}
//----------------------------------------------//

int main (int argc, char **argv)
{
   TArray arr;
   if (LoadFromFile(arr, "words.txt"))
      return 1;
   SortArray(arr);
   PrintArray(arr);
   return 0;
}


Правда, такого военного компилятора у меня нет, но всё должно работать, единственное нужно закоментировать строчку
Код

using namespace std;

и при подключении заголовочных файлов везде добавить '.h'
Код

#include <iostream.h>
#include <fstream.h>
#include <vector.h>
#include <string.h>

Автор: deadlegolas 13.11.2009, 22:19
t_gran, спасибо огромное, но что это за <vector.h> ? 

Автор: t_gran 15.11.2009, 10:09
В заголовочном файле vector.h описан класс vector, который входит в стандартную библиотеку шаблонов STL. Смею подозревать, раз вы спросили (и скорее всего пробовали откомпилировать данный код), что у Brland С++ 3.1 отсутствует данный класс.

P.S.: я пользовался даным компилятором последний раз лет 5 назад и не помню, что в него входило.

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