Отсортировать содержимое файла по алфавиту - C (СИ)

  1. Дали лабу,писать можно только на C. С ним не особо знаком. Вопрос такой. После чтения всех символов из файла, мне нужно отсортировать полученное по алфавиту. Пробую обычным пузырьком, но после него у меня компиль(Visual Studio 2017) ругается на free(text). Немного не понимаю, как я порчу кучу. Может я торможу, подскажите пожалуйста.C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 //19. Задан текстовый файл F1, состоящий из произвольной последовательности буквенных символов. Упорядочить символы в алфавитном порядке, при этом все повторяющиеся символы должны быть удалены, и переписать новый текст в файл F2. #include <stdio.h> #include <string.h> #include <stdlib.h> #include <conio.h> #include <Windows.h> #include <malloc.h>   void bubble(char *i, int n);   void main(void) {     SetConsoleCP(1251);     SetConsoleOutputCP(1251);       char *text = NULL;     int size = 0;     FILE *f;     f = fopen("F:\Input.txt", "r");       if (f != NULL)     {         fseek(f, 0, SEEK_END);         size = ftell(f);         fseek(f, 0, SEEK_SET);           text = (char*)malloc(size * sizeof(char));         fread(text, size, 1, f);     }     fclose(f);       bubble(text, strlen(text));     printf("%s", text);       f = fopen("F:\Output.txt", "w");     fwrite(text, 1, size, f);       free(text);     fclose(f);     _getch(); }   void bubble(char *i, int n) {     int a, b;     char t;       for (a = 0; a < n; a++)         for (b = n - 1; b >= a; b--)         {             if (i[b - 1] > i[b])             {                 t = i[b - 1];                 i[b - 1] = i[b];                 i[b] = t;             }         }   }


textual

Код к задаче: «Отсортировать содержимое файла по алфавиту - C (СИ)»

#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
 
void bubble(char *i, int n);
 
int main(void)
{
    char *text = NULL;
    int size = 0;
    FILE *f;
    f = fopen("c:\\in.txt", "r");
    if (f != NULL)
    {
        fseek(f, 0, SEEK_END);
        size = ftell(f);
        fseek(f, 0, SEEK_SET);
        text = (char*)malloc(size * sizeof(char)+1);
        fread(text, size, 1, f);
    }
    text[size-1]='\0';
    fclose(f);
    bubble(text, strlen(text));
    printf("%s", text);
    f = fopen("c:\\out.txt", "w");
    fwrite(text, 1, size, f);
 
    free(text);
    fclose(f);
    _getch();
}
 
void bubble(char *i, int n)
{
    int a, b;
    char t;
 
    for (a = 0; a < n-1; a++)
        for (b = n - 2; b >= a; b--)
        {
            if (i[b] > i[b+1])
            {
                t = i[b];
                i[b] = i[b+1];
                i[b+1] = t;
            }
        }
}

СДЕЛАЙТЕ РЕПОСТ

6   голосов, оценка 4.000 из 5



Похожие ответы
  1. Как с помощью одного цикла отобразить на экране содержимое обоих массивов, при этом первый массив должен отображаться в первой строке, а каждый элемент второго массива должен помещаться под соответствующим элементом первого массива. Чтобы выводилось вот-так, только с помощью одного цикла. 1.00 | 2.00 | 3.00 | 4.00 | 5.00 | 6.00 | 7.00 | 8.00 | 1.00 | 3.00 | 6.00 | 10.00 | 15.00 | 21.00 | 28.00 | 36.00 |C1 2 3 4 5 6 7 8 9 10 11 12     for (index = 0; index < 2; index++)     {         for (index = 0; index < SIZE; index++)             printf("%5.2lf | ", array_one[index]);           printf("\n");           for (index = 0; index < SIZE; index++)             printf("%5.2lf | ", array_two[index]);            printf("\n");     }

  1. Нужна помощь. Нужно написать код для сортировки строк, с клавиатуры вводится наименование города и популяция. Задача отсортировать в алфавитном порядке города. Вот сам код в СИ.C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 #include #include #include "struct.h"     void inputTown(struct town*pt); void printTown(struct town*pt); void sortTown(struct town*pt);   int main(int argc, char**argv) {     struct town Towns[10];       for(int i = 0; i < 10; i++){         inputTown(&Towns[i]);     }         sortTown(&Towns);         for(int i = 0; i < 10; i++){         printTown(&Towns[i]);     }       getchar();     return 0; }   void inputTown(struct town*pt) {     printf("Input netx town.\n");     printf("Name: ");     gets_s(pt->name, NAMELENGHT);       printf("Population: ");     scanf_s("%d", &pt->population);     getchar();     return; }   void printTown(struct town*pt) {     printf("town: %s, population:%d\n", pt->name, pt->population); }   void sortTown(struct town*pt) {     char tmp[80];     char*ptr = tmp;       for (int i = 0; i < NAMELENGHT - 1; i++)                     //сортировка выбором         for (int j = i; j < NAMELENGHT; j++) {             if (strcmp(pt[i].name, pt[j].name) > 0)             {                 *ptr = pt[i].name;//[80]                 int x = pt[i].population;                 strncpy_s(pt[i].name, NAMELENGHT, pt[j].name, strlen(pt[j].name));                 pt[i].population = pt[j].population;                 strncpy_s(pt[j].name, NAMELENGHT, ptr, strlen(ptr));                 pt[j].population = x;             }         } }собственно вроде ошибка где то в функции sortTown, либо может неверно аргумент отправляю в функцию. Подскажите где ошибка пожалуйста.

  1. Не получается сделать сортировку, уже много чего перепробовал, помогите пожалуйстаC1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include #include #include struct uchs {     char klass[20];     int year;     char name[20];     int str;     char rasp[150];   }; int main() {     int i;     int s;     struct uchs arr[100]; //100 ГґГ*ìèëèé Г¬Г*êñèìóì     int count_uch = 0; //Г±Г·ГҐГІГ·ГЁГЄ ГґГ*ìèëèé     int d = 8;     //int j, k;     int a = 0;     int fh = _open("file.dat", _O_RDWR | _O_BINARY); //ïðîâåðÿåì, Г±ГіГ№ГҐГ±ГІГўГіГҐГІ ëè ГґГ*éë         if (fh == -1)     {   //åñëè Г*ГҐ Г±ГіГ№ГҐГ±ГІГўГіГҐГІ, ñîçäГ*ГҐГ¬           fh = _creat("file.dat", _S_IREAD | _S_IWRITE);         if (fh == -1)             return 1;     }     //ïîêГ* Г*ГҐ ГЄГ®Г*ГҐГ¶ ГґГ*éëГ* ñ÷èòûâГ*ГҐГ¬ ГЁГ*ГґГі Гў Г¬Г*Г±Г±ГЁГў ñòðóêòóð     while (!_eof(fh))     {         _read(fh, &arr[count_uch], sizeof arr[count_uch]);         count_uch++;  //óâåëè÷èâГ*ГҐГ¬ Г°Г*çìåðГ*îñòü Г¬Г*Г±Г±ГЁГўГ* Г*Г* 1 Г± ГЄГ*æäûì Г±Г·ГЁГІГ*Г*Г*ûì ýëåìåГ*òîì     }     do     {         setlocale(LC_ALL, "Rus");         system("cls"); //î÷èñòêГ* ГЅГЄГ°Г*Г*Г*         printf("1: ÄîáГ*ГўГЁГІГј Г§Г*ГЇГЁГ±Гј\n2: Âûâåñòè ГЁГ*ôîðìГ*öèþ Г® ГўГ±ГҐГµ ГіГ·ГҐГ*ГЁГЄГ*Гµ\n 3: îòñîðòèðîâГ*ГІГј:\n0: Г‡Г*êðûòü ïðîãðГ*ììó\nÂûáåðèòå ГЇГіГ*ГЄГІ: ");         scanf("%d", &d);         switch (d) //ìåГ*Гѕ         {                 case 1: {                     setlocale(LC_ALL, "Rus");                     //äîáГ*âëåГ*ГЁГҐ Г*îâîé Г§Г*ГЇГЁГ±ГЁ                     printf("Ââåäèòå èìÿ/ГґГ*ìèëèþ: ");                     fflush(stdin);                     gets(arr[count_uch].name);                         printf("Ââåäèòå ГЄГ«Г*Г±Г± ГіГ·ГҐГ*ГЁГЄГ*: ");                     fflush(stdin);                     gets(arr[count_uch].klass);                     printf("Ââåäèòå ñêîëüêî ëåò ГіГ·ГҐГ*ГЁГЄГі: ");                     fflush(stdin);                     scanf("%d", &arr[count_uch].year);                       printf("Ââåäèòå ñêîëüêî äåГ*ГҐГЈ Г*Г* ГЄГ*ðòî÷êå Гі ГіГ·ГҐГ*ГЁГЄГ*: ");                     fflush(stdin);                     scanf("%d", &arr[count_uch].str);                     printf("Ââåäèòå Г°Г*Г±Г±ГЇГЁГ±Г*Г*ГЁГҐ ГіГ·ГҐГ*ГЁГЄГ*: ");                     fflush(stdin);                     gets(arr[count_uch].rasp);                     count_uch++;                     break; }                                         case 2: {setlocale(LC_ALL, "Rus");                     for (i = 0; i arr[j].year)                           {                               uchs s_arr = arr[count_uch];                               arr[i] = arr[j];                               arr[j] = s_arr;                           }                       }                   }                   _getch();                   break; }                   }           }         while (d != 0);         return 0;     }

  1. нужно отсортировать каждую строку двумерной матрицы по возростанию. если можно с объяснением.Добавлено через 54 минуты примерно имею следующий код:C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 #include   int main(void) {         int a[2][4];     int i, j, z,k,y;     printf(" vvedite massiv: \n");     for (i = 0; i < 2; i++)     for (k = 0; k < 4; k++)         scanf("a[%d][%d]", &a[i][k]);     for (i = 0; i < 1; i++)     {         z = a[i];         for (j = i - 1; j >= 0; j--)             if (z < a[j]) {                 a[j + 1] = a[j];                 a[j] = z;             }     }      for (i = 1; i < 2; i++)         {         y = a[i];         for (j = i - 1; j >= 0; j--)             if (y < a[j]) {                 a[j + 1] = a[j];                 a[j] = y;             }     }     printf("\n otsortirovannyi massiv: \n", a[i]);     for (i = 0; i < 2; i++)     for (k = 0; k < 4; k++)         printf("%d%d\n", a[i][j]);

  1. Привет всем. Подскажите, как можно сортануть элементы списка. Есть список книг и нужно упорядочить их по количеству страниц. Вот пример:C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 #include #include   int main (void) {     typedef struct list     {         char *name;         int pages;         struct list *next;     } list;         list *book1, *book2,*book3;     book1 = book2 = book3 = NULL;         book1 = malloc(sizeof(list));     book1->pages = 200;     book1->next = NULL;         book2 = malloc(sizeof(list));     book2->pages = 150;     book2->next = NULL;         book3 = malloc(sizeof(list));     book3->pages = 300;     book3->next = NULL;         book1->next = book2;     book2->next = book3;     book3->next = NULL;         list *ptr1;     ptr1 = book1;         list *ptr2;     ptr2 = book1;         while(ptr1!=NULL)     {         while(ptr2!=NULL)         {             if(ptr2->next->pages < ptr2->pages)             {                 list *minbook;                 minbook=ptr2->next;                 ptr2->next=ptr2;                 ptr2=minbook;             }                             ptr2=ptr2->next;         }                 ptr1=ptr1->next;     }         ptr1=ptr2;     while(ptr1!=0)     {         printf("%d\n",ptr1->pages);     } }

  1. Не хочет записывать данные в массив... проверьте у себя по возможности и отпишитесь....C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 #include #include   #define Hight   18    // высота -- строки -- ученики #define Weight   3    //ширина таблицы -- столбцы -- предметы   int main() {     FILE *base;     base=fopen("base.txt", "r");     if( base == NULL ){         printf("[#] err: File ne naiden\n");         system("pause");         system("cls");         return main();     }     else{         /** Инициализация массива **/         int arr[Hight][Weight] = { 0 }, i = 0, j = 0;         /** Заполнение массива на основе данных из *.TXT файла **/         for(/* i = 0*/; i < Hight; i++){             printf("[%2d]", i+1);             for(/* j = 0*/; j < Weight; j++){                 fscanf(base, "%d", &arr[i][j]);                 printf(" %d ", arr[i][j]);             }             printf("\n");         }         fclose(base);         /** Общее кол-во 5-к в таблице **/         printf("\n[*] Obshee kol-vo 5-k v tablice -> ");         int count=0;         for( i = 0; i < Hight; i++){             for( j = 0; j < Weight; j++){                 if( arr[i][j] == 5 ) count++;             }         }         printf("%d\n",count);           /** Кол-во 3-к у каждого ученика **/         printf("\n[*] Kol-vo 3-k y kajdogo ychenika:\n");         for( i = 0; i < Hight; i++){             count = 0;             for( j = 0; j < Weight; j++){                 if( arr[i][j] == 3 ) count++;             }             printf("[%2d] %d shtyk\n", i+1, count);         }           /** Кол-во 2-к по каждому предмету **/         printf("\n[*] Kol-vo 2-k po kajdomy predmety\n");         for( j = 0; j < Weight; j++){             count = 0;             for( i = 0; i < Hight; i++){                 if( arr[i][j] == 2 ) count++;             }             printf("[%d] %d shtyk\n", j+1, count);         }     }     system("pause");     return 0; }base.txt:C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 5 2 3 4 5 4 3 3 3 2 3 5 2 2 2 5 5 5 5 4 4 4 3 4 1 4 5 2 4 4 5 3 3 5 4 4 5 4 5 5 5 5 5 2 5 5 3 3 4 4 4 2 3 2

  1. Есть две строки символов:C++1 2 char* c ="my string" char c1="ssss";Нужно заменить "string" на содержимое c1. Как это сделать?

  1. вот код, задача отсортировать массив по возрастанию, а он ,вместо отсортированного массива, выводит в ответ одни нулиC1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 #include #include #include #include main(){ clrscr(); float mass_q[100]; int n; printf("Vvedite N ");scanf("%d", &n); printf("\n\n"); for (int i=0;i0)pol++;     if(mass_q[i]<0)otrit++;}     printf("\n\n\notritsatelnyh=%d\n\n\n",otrit);     // bylo pokazano skolko otritsat eleventow     int tmp;     for(i=0;i

  1. Скопировать содержимое одного файла в другой файл. Для копирования использовать функции блочного ввода-вывода. Файл необходимо открыть в двоичном режиме.