Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2016, 20:59   #1
Dionisius
Новичок
Джуниор
 
Регистрация: 27.01.2016
Сообщений: 2
По умолчанию Сортировка чисел в строке в порядке возрастания (Си)

Условие задачи:
Записи из целых чисел преобразовать так, чтобы вначале стояли отрицательные числа, затем - нули, а затем положительные числа.

Мой имеющийся код (С):
Код:
#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;
}
На самом деле данная программа сортирует только цифры.
Допустим, я ввожу: 321 371 93 23. Получаю 123 137 39 23 (ожидаемый результат должен быть 23 93 321 371)
Можете подогнать, пожалуйста, мой код под условие выше?

_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 28.01.2016 в 10:41.
Dionisius вне форума Ответить с цитированием
Старый 28.01.2016, 10:00   #2
FoCUS313
 
Регистрация: 22.01.2016
Сообщений: 8
Сообщение

Делай через массив, заноси из строки туда сразу в Integer, потом сортируй его в цикле (сравнивая значения) и выводи в строку.
С кодом на си помочь не могу.
http://orgsoft.xyz
FoCUS313 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка чисел в строке в порядке возрастания) Dionisius Общие вопросы C/C++ 0 27.01.2016 01:58
Методом простых включений произвести сортировку (упорядочивание в порядке возрастания) массива из N действительных чисел СашаСаша Помощь студентам 1 04.07.2011 18:41
Дан файл вещественных чисел. Создать файл целых чисел, содержащий номера всех локальных максимумов в порядке возрастания zzz6 Помощь студентам 1 04.07.2011 12:59
Дана последовательность чисел a1, a2, …, an. Требуется переставить числа в порядке возрастания. Figushkin Помощь студентам 1 24.05.2010 20:44
Turbo Pascal упорядочивание чисел в порядке возрастания -COREY- Помощь студентам 1 23.11.2009 19:56