Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Сортировка строк. Си.

Автор: Bo2nik 16.04.2008 18:27

Написал сортировку строк (на входе файл со строкой, задача отсортировать указатели и вывести по ним символы), а прога не хочет выводить отсортированную строку. Ошибка вроде с указателями, тока не могу понять где.

Код

#include "stdafx.h"
#include <stdio.h>
#include <string.h>

main()
{
    char line1[20];
    int i,j,k,b;
    k = 0;
    FILE *fp1;
    fp1 = fopen ("text1.txt","r"); // файл со строкой
    while (!feof(fp1))
    {
        fgets (line1,10,fp1);
        k = strlen(line1);
        char *pa = line1; // указатель на строку
        for (i = 1; i<k;  i++) //сортировка пузырьком
        {            
            for (j = 0;  j<k-i;  j++)
            {    
                if (*(pa+j)>*(pa+j+1))
                {    
                    b = *(pa+j);          
                    *(pa+j) = *(pa+j+1);    
                    *(pa+j+1) = b;
                }
            }
        }
        printf("%c\n",*(pa+i)); //вывод
    }
}


Может лучше будет если отдельную процедуру для сортировки сделать?

Автор: volvo 16.04.2008 18:39

Посмотри сюда:

printf("%c\n",*(pa+i)); //вывод
, и подумай, что будет храниться в i после цикла, и что, собственно, ты хочешь распечатать?

Автор: Bo2nik 16.04.2008 18:49

Цитата(volvo @ 16.04.2008 15:39) *

подумай, что будет храниться в i после цикла, и что, собственно, ты хочешь распечатать?


короче я опять замохал с этим выводом, вот так надо было:
Код

printf("%s\n",line1);


однако, если ввести большую строку, например fafzzasasdasffsadfadafag

результат будет следующим:
aaaffsszz
aaddfffss
aaadfg

Автор: Bo2nik 16.04.2008 19:46

Цитата

однако, если ввести большую строку, например fafzzasasdasffsadfadafag
результат будет следующим:
aaaffsszz
aaddfffss
aaadfg


с этим тоже замохал, надо было вот так:
Код

fgets (line1,100,fp1);


Автор: volvo 16.04.2008 20:19

Ну, в принципе, вот это никаких лишних символов не выдает:

printf("%s\n",pa);
(если у тебя одна строка в файле, и нет символа перевода строки, потому что fgets забирает строку включая символ "\n")

Автор: Bo2nik 16.04.2008 21:31

Спасибо.