Вопрос по сортировке строк в файле

Тема в разделе "Общие вопросы по С и С++", создана пользователем pharrell, 10 июл 2006.

Статус темы:
Закрыта.
  1. pharrell

    pharrell Гость

    Программа должна считыватьстроки из файла, отсортировать их и записать в этот же файл.Но почему то программа последнюю строчку копирует и получается,что в тексте две одинаковые строчки.Подскажи те пожалуйста если где есть ошибка.Заранее спасибо
    Код (Text):
    #include<stdio.h>
    #include<stdlib.h>
    #include<conio.h>
    #include<windows.h>
    #include<string.h>
    #include<iostream.h>

    #define maxline 1000
    void sort(char* ptr[],int n_lines)
    {
    int i,j;
    char *tmp;
    for(i=0;i<n_lines-1;i++)

    for(j=0;j<n_lines-1;j++)

    if(strcmp(ptr[j],ptr[j+1])>0)
    {
    tmp=ptr[j];
    ptr[j]=ptr[j+1];
    ptr[j+1]=tmp;
    }


    }
    void write_lines(char* ptr[],int n_lines)
    {
    int i;
    char str[100];
    for(i=0;i<n_lines;i++)
    {
    CharToOem(ptr[i],str);
    cout<<str<<endl;
    }
    }
    void main(void)
    {
    FILE *in;
    char str[100];
    int i;
    int counter=0;
    char buf[maxline];
    char *ptr[maxline];

    if((in=fopen("C:\\in.txt","rt"))==NULL)
    {
    cout<<"Error open file";
    return;
    }
    for(counter=0;(!feof(in))&&counter<maxline;counter++)
    {
    fgets(buf,maxline,in);
    if(buf[strlen(buf)-1]=='\n')
    {
    buf[strlen(buf)-1]='\0';
    }
    ptr[counter] = new char[strlen(buf)+1];
    strcpy(ptr[counter],buf);
    }
    fclose(in);
    cout<<"strok--->>"<<i<<endl;
    cout<<"No sort:"<<endl;
    write_lines(ptr,counter);
    cout<<endl<<endl<<"Sort:"<<endl;
    sort(ptr,counter);
    write_lines(ptr,counter);

    }
     
  2. Dest!n

    Dest!n Гость

    Я проверил на VS2005 и ошибок не нашел, кроме

    fclose(in);
    // cout<<"strok--->>"<<i<<endl; // используется неинициализированная переменная i; наверное, имелось в виду
    cout<<"strok--->>"<< counter <<endl;
     
  3. zubr

    zubr Гость

    А как же ты хотел, если у тебя i<n_lines-1 - последнюю строку ты не учитываешь.
     
  4. Dest!n

    Dest!n Гость

    Ага, я нашел неточность. У тебя в файле последняя строка пустая. Если убрать последний перенос строки в текстовом файле - все будет работать. Но это, конечно, не выход. Лучше в скрипте добавить всего одну строку:
    ...
    strcpy(ptr[counter],buf);
    buf[0]='\0';
    ...
     
  5. pharrell

    pharrell Гость

    Как отсортировать,не создавуая массив указателей так сказать сортировка в файле??
     
  6. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    А зачем? Для не большим файлов, размер которых позволят целиком отобразить их в памать, это оптимальным подход.

    Для большим файлов в общем случае использует что нибудь вроде поэтапной сортировки(сортировки частями с последующим слиянием), например "многофазная сортировка слиянием".
     
  7. Provisor

    Provisor Гость

    Не забываем освобождать память :D
    Код (Text):
    for(int j=0;j<counter;j++)
    delete []ptr[j];
     
Загрузка...
Похожие Темы - Вопрос по сортировке
  1. ApplePen
    Ответов:
    0
    Просмотров:
    56
  2. gURaBA_N
    Ответов:
    3
    Просмотров:
    91
  3. kartaman
    Ответов:
    0
    Просмотров:
    126
  4. Peter
    Ответов:
    4
    Просмотров:
    519
  5. di0d_
    Ответов:
    1
    Просмотров:
    433
Статус темы:
Закрыта.

Поделиться этой страницей