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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы
Старый 10.06.2013, 15:30   #1
uibiwe
Пользователь
 
Регистрация: 08.03.2013
Сообщений: 10
По умолчанию строки

задан строка. сформировать строки таким образов что бы первой была самая короткая строка а последней самая длинная (все остальные строки остаются как были) например так: (исходный текст: "жили у бабуси два веселых гуся" --> сформированный текст: " у жили бабуси два гуся веселых")

Последний раз редактировалось uibiwe; 10.06.2013 в 15:33.
uibiwe вне форума Ответить с цитированием
Старый 10.06.2013, 15:41   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Наработки выкладывайте... Удалось самому что-нибудь реализовать....
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!

Последний раз редактировалось Bugrimov; 10.06.2013 в 15:47.
Bugrimov вне форума Ответить с цитированием
Старый 12.06.2013, 22:47   #3
Nuklon
Форумчанин
 
Аватар для Nuklon
 
Регистрация: 05.04.2012
Сообщений: 134
По умолчанию

Код:
#include <stdio.h>
#include <ctype.h>
#define  ch_swap(c, a, b)  c = a, a = b, b = c


void  task_func(char* s) {
   char* a, *a1, *p, *t, c;
   int  n, n1;

   a  = a1 = t = NULL;
   n  = n1 = 0;
   p  = s;


   // первый проход поиск минимального и максимального слова
   do {

       // пропуск идущих нескольких подряд пробельных символов
       if(t == NULL) {
           for(; isspace(*p); ++p);
           if(! *p)
                 break;
       }

       if(isspace(*p) || ! *p) {
           if(((p - t) < n) || ! n) { // мин
                a = t;
                n = (p - t) + 1;
           }
           if(((p - t) > n1) || ! n1) { // макс
                a1 =  p - 1;
                n1 = (p - t) + 1;
           }
           t = NULL;
       } else {
           if(t == NULL)
                t = p;
       }

    } while(*p++);

    if((a == NULL) || (a1 == NULL))
          return;

    /* сместить позицию если минимальное слово
       находится выше адреса максимального слова */
    if(a > a1)
         a1 += n;

    // сместить разделитель потому-что был конец строки
    if(p == (a + n)) {
         for(t = --a; t < a + (n-1); ++t) 
              ch_swap(c, *t, *(t + 1));
    }


    // переставляем минимальное слово в начало строки
    while(n--) {
         for(t = a; t > s; --t)
              ch_swap(c, *t, *(t - 1));
         ++a;
         ++s;
    }

    // переставляем максимальное слово в конец строки
    p -= 2;
    while(n1--) {
         for(t = a1; t < p; ++t)
              ch_swap(c, *t, *(t + 1));
         --a1;
         --p;		
    }
}



int  main(void) {
    char s[] = "жили у бабуси два веселых гуся";
    puts(s);
    task_func(s);
    puts(s);
    return 0;
}
Проверка: http://codepad.org/5k0CRCUn
Nuklon вне форума Ответить с цитированием
Старый 12.06.2013, 22:51   #4
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Красиво, хотя я очень осторожно отношусь к макро-функциям ...
Код:
#define  ch_swap(c, a, b)  c = a, a = b, b = c
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Ответ


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

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на строки. Даны две строки. Определить можно ли из символов первой строки получить вторую строку.( написать подпрограммой и ANTON1994 Паскаль, Turbo Pascal, PascalABC.NET 5 09.02.2013 14:07
Программа на языке "Ассемблер" - ввод строки, анализ длины строки, добавление точки в конец строки Алексей_2012 Помощь студентам 1 05.04.2012 11:26
Сделать в гриде строки выше, чтобы не растягивать строки до бесконечности kris__tina БД в Delphi 1 09.06.2011 15:31
Создание пустой строки и копирование в неё содержимое предыдущей строки Gvaridos Microsoft Office Excel 2 29.10.2010 13:33
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10