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

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

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

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

Купить рекламу на форуме - 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