Сортировка чисел из файла в порядке возрастания (перевод с Паскаля) - C (СИ)
Формулировка задачи:
Хотелось бы, чтобы вы преобразовали код отсюда: Вывести числа из текстового файла в порядке возрастания! из Паскаля в Си
Условие: сортировка чисел из файла в порядке возрастания
Решение задачи: «Сортировка чисел из файла в порядке возрастания (перевод с Паскаля)»
textual
Листинг программы
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
const int SIZE =80;
void form (char*, char*);
char *probel2 (char *in);
char *probel1 (char *in);
char *copyword (char *, char *, int);
char *sort (char *a, char *b, char *);
int main()
{
char buf[SIZE], outbuf[SIZE]={' '};
while(cout<<"Vvedite stroky: ",
cin.getline(buf, SIZE))
{
form (buf, outbuf);
printf("Rezultat: %s", outbuf);
return 0;
}
}
void form (char *a,char *out)
{
char *first=a;
*out='\0';
int s[80]={0};
char min;
while (*(first=probel1(a)))
{
min=*first;
a=probel2(first);
out=copyword(first, out,a-first);
}
cout<<endl;
}
char *probel1(char *in)
{
while (*in&&(*in==' ')||(*in=='\t'))
in++;
return in;
}
char *probel2 (char *in)
{
while (*in&&*in!=' '&&*in!='\t')
in++;
return in;
}
char *copyword (char * from, char *to, int len)
{
char *a=to;
char *d=to;
char *b=to;
for (int j=0; (j<len)&&(*to++=*from++); j++)
;
while (a!=to)
{
b=d;
while (b!=to-1)
{
if (*b>*(b+1))
{
char buf=*(b+1);
*(b+1)=*b;
*b=buf;
}
b++;
}
a++;
}
*to++=' ';
*to='\0';
return to;
}
Объяснение кода листинга программы
- Сначала мы включаем необходимые заголовочные файлы:
, , , . - Объявляем константу SIZE равную 80.
- Объявляем функцию form, которая принимает два указателя на строки (char*) и выполняет сортировку и вывод результата.
- Внутри функции main создаем две строки: buf и outbuf.
- Затем в цикле while считываем строки из ввода пользователя и вызываем функцию form для каждой строки.
- Функция form начинает с поиска первого слова в строке, затем определяет минимальный символ и копирует это слово в начало выходной строки.
- Затем функция form вызывает функцию probel1, чтобы найти следующую позицию в строке, где находится следующее слово.
- Функция probel1 проверяет каждый символ в строке до тех пор, пока не найдет слово, которое заканчивается пробелом или табуляцией.
- Функция probel2 проверяет каждый символ в строке до тех пор, пока не найдет слово, которое начинается с пробела или табуляции.
- Функция copyword копирует слова из входной строки во входную строку, добавляя каждое слово в конец выходной строки.
- Затем функция copyword сортирует слова во входной строке, сравнивая каждое слово слева направо и меняя их местами при необходимости.
- Наконец, функция main выводит результат на экран.
- Функция form возвращает 0, указывая на успешное выполнение.