Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Сортировка строк по возрастанию их длины


Автор: Kais 9.12.2012, 22:26
Помогите пожалуйста.
Дан текстовый файл, состоящий из некоторого количества строк. Написать функцию для сортировки  порядка строк  в файле, по возрастанию  их длины.


Если можно, то чтобы начало было примерно такое

#include <iostream.h>
#include <conio.h>
#include <fstream>
#include<string.h>
#include <stdio.h>


int main()
{ const int max=256, max1=256;
char filename [max],str[max];

cout << "vvedi imya faila : ";
cin >> filename;
ifstream fin (filename);
if (!fin) { cout << " oshibka ";
getch ();
return 1;
}
cout << " file soderzit: "<<endl;
fin.getline (str,max,'\0');
cout << str << endl;
fin.close ();


...

getch();
return 0;
}

т.е. тут открывает текстовый файл и выводит на экран содержимое.

есть идея сделать методом пузырька, но я не знаю как ее осуществить, чтобы сортировалась именно длина строк.
Среди вас точно знаю, что есть умные люди) если не сложно, напишите пожалуйста код

Автор: artsb 10.12.2012, 08:03
Цитата(Kais @  9.12.2012,  22:26 Найти цитируемый пост)
Если можно, то чтобы начало было примерно такое

Нет, нельзя.

Вам тут что, кружок добровольных писак? Это форум. Здесь помогают, а не делают за вас.


Цитата(Kais @  9.12.2012,  22:26 Найти цитируемый пост)
есть идея сделать методом пузырька, но я не знаю как ее осуществить, чтобы сортировалась именно длина строк.

Реализовать идею поможет http://google.ru.

Автор: Kais 10.12.2012, 08:50
Цитата
 Нет, нельзя.


нельзя так нельзя. я не настаиваю.
данную идею гугл реализовать не помог.

раз помогают, так помогите. а если не знаете, так зачем писать пустые слова?

Автор: artsb 10.12.2012, 09:37
Цитата(Kais @  10.12.2012,  08:50 Найти цитируемый пост)
данную идею гугл реализовать не помог.

Как это так? Вы не смогли найти http://algolist.manual.ru/sort/bubble_sort.php?

Автор: Kais 10.12.2012, 17:31
Благодарю, но алгоритм и методом пузырька и методом выбора я знаю. Я не знаю как реализовать данную идею в конкретно этой задаче.

Автор: artsb 10.12.2012, 19:35
1. Считываете строки из файла в массив или в TStringList.
2. Сортируете методом пузырька по длинам строк: если будут массивы char'ов, то для определения длины строки используйте strlen(); если будут массивы AnsiString'ов или будет использоваться TStringList, то тогда используем AnsiString::Length().
3. Сохраняем полученный массив в файл.

Автор: Kais 16.12.2012, 17:55
Благодарю за советы, но у меня все равно не получается. я не понимаю как это записывать

Автор: artsb 16.12.2012, 21:11
Пример:
Код

    bool blnContinue;
    TStringList *lst;

    try
    {
        lst = new TStringList();
    }
    catch(...)
    {
        lst = NULL;
    }

    if(!lst)
    {
        return;
    }

    lst->LoadFromFile("filename_src.txt");

    blnContinue = true;
    while(blnContinue)
    {
        blnContinue = false;

        for(int i = 1; i < lst->Count; i++)
        {
            if(lst->Strings[i].Length() < lst->Strings[i - 1].Length())
            {
                lst->Insert(i + 1, lst->Strings[i - 1]);
                lst->Delete(i - 1);

                blnContinue = true;
            }
        }
    }

    lst->SaveToFile("filename_dest.txt");

    delete lst;

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