Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> строки 
V
    Опции темы
Toxyrain
Дата 28.4.2009, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 15.4.2009

Репутация: нет
Всего: нет



в общем есть задание нужно отсортировать строку в порядке убывания и затем расставить элементы отсортированой строки в таком порядке ".... s4 s2 s0 s1 s3 ...."
, не получается расставить элементы в таком порядке вернее половину получается.
вот код 
Код

#include <iostream>
#include <string.h>

using namespace std;
int i,n,f,j=0;
char null;


int main()
{
    char* a=new char[n];
    char* a2=new char[n];
    cout<<"Введите размерность строки: ";
    cin>>n;
    cout<<endl;
    for(i=0;i<n;i++)
    {
        cout<<"Введите "<<i+1<<"-й элемент строки: ";
        cin>>a[i];
        cout<<endl;
    }
    cout<<"Исходня строка: ";
    for(i=0;i<n;i++)
    {
    cout<<a[i]<<" ";
    }
    cout<<endl;
    for(f=0;f<n-1;f++)
    {
        for(i=0;i<=n-2;i++)
        {
            if(a[i]<a[i+1])
            {
                null=a[i];
                a[i]=a[i+1];
                a[i+1]=null;
            }
        }
    }
    cout<<endl<<"Отсортированая строка: ";
    for(i=0;i<n;i++)
    {
    cout<<a[i]<<" ";
    }
    cout<<endl;
    j=n;
    cout<<endl<<"Строка после перестановки: "<<endl;
    for(i=0;i<=n;i++)
    {
        if((j-i)%2!=0)
        {

        a2[i]=a[j-i-1];
        }
        else
        {
        a2[i]=a[j-i];

        }
    }
    for(i=0;i<=n;i++)
    {
        cout<<a2[i]<<" ";
    }
    delete[](a);
    delete[](a2);
    return 0;
}


PM MAIL   Вверх
azesmcar
Дата 28.4.2009, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



упорядочить строку
Код

#include <string>
#include <algorithm>

int main()
{
   std::string str = "hello world";
   std::sort(str.begin(), str.end());
}

вторую часть задания не понял..
s4 s2 s0 s1 s3 .... что за порядок такой? тут есть какая-то логика?
PM   Вверх
Toxyrain
Дата 28.4.2009, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 15.4.2009

Репутация: нет
Всего: нет



тоесть 4й эл-т отсортированой строки стает 0-ым элементом 2-й элемент отсортированой строки стает 1м элементом 0-й элемент отсортированой строки стает 2 элементом 1-й элемент отсортированой строки стает 3 элементом ( считал начиная с 0) и тд заполнять строку от центра в обоих направлениях

Это сообщение отредактировал(а) Toxyrain - 28.4.2009, 22:19
PM MAIL   Вверх
azesmcar
Дата 28.4.2009, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Код

int main()
{
    std::string str = "01234";
    std::sort(str.begin(), str.end());
    
    for (std::string::iterator it = str.begin(); it != str.end(); ++it)
        std::reverse(str.begin(), it);

    std::reverse(str.begin(), str.end());
    std::cout << str << std::endl;
}

так что ли?
PM   Вверх
Toxyrain
Дата 28.4.2009, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 15.4.2009

Репутация: нет
Всего: нет



да, но только есть одня просьба, мы еще классы не учили и както палевно будт сдавать причем я не смогу объяснить, это можно сделать как то по другому, не через классы ?
PM MAIL   Вверх
azesmcar
Дата 28.4.2009, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата

да, но только есть одня просьба, мы еще классы не учили и както палевно будт сдавать причем я не смогу объяснить, это можно сделать как то по другому, не через классы ?

Я алгоритм примерный показал (хотя не самый оптимальный). Сам не додумаешь? Попробуй.
PM   Вверх
Toxyrain
Дата 28.4.2009, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 15.4.2009

Репутация: нет
Всего: нет



эм... проблема в том что я не понимаю что там написано(догадиваюсь конечно что это сортировка через шаблон какойто вроде smile  или класс ), даже если опустить все префиксы std:: код понятней для меня не становится, так как я тупо не знаю принципа работы этой штуки и что это такое
+ если в строке 
Код

string str = "01234";

заменить на
Код

string str = "edcba";

результат начинает сильно отличатся от желаемого

Это сообщение отредактировал(а) Toxyrain - 28.4.2009, 22:55
PM MAIL   Вверх
azesmcar
Дата 28.4.2009, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Toxyrain

не забывай что строка сортируется.
edcba превратится после сортировки в abcde
попробуй реализовать функцию std::reverse.
Она переворачивает строку в заданном range. Т.е. к примеру у нас есть строка

12345 - после вызова для всего текста получим 54321. Можем вызвать для его части 234 - тогда получим 14325
PM   Вверх
Toxyrain
Дата 28.4.2009, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 15.4.2009

Репутация: нет
Всего: нет



ААААА даже если написсать 
Код

string str = "abcde";

то выходит не то 
+ САМАЯ главная причина Я НЕ знаю этого метода и эту библиотеку , даже если я разберусь с этим методом то я не сдам эту программу в силу того что препод скажет что мы такого не учили =)
PM MAIL   Вверх
Acer
Дата 28.4.2009, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: нет
Всего: 8



Ну, а что вы учили?
PM MAIL   Вверх
Toxyrain
Дата 28.4.2009, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 15.4.2009

Репутация: нет
Всего: нет



демонические масивы, структуры, функции, указатели, графику
PM MAIL   Вверх
azesmcar
Дата 28.4.2009, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Toxyrain
Тогда я все же не пойму по какой логике нужно менять текст.

Цитата

тоесть 4й эл-т отсортированой строки стает 0-ым элементом 2-й элемент отсортированой строки стает 1м элементом 0-й элемент отсортированой строки стает 2 элементом 1-й элемент отсортированой строки стает 3 элементом ( считал начиная с 0) и тд заполнять строку от центра в обоих направлениях

Что значит заполнять строку от центра?

Добавлено @ 23:32
Цитата

демонические масивы

smile
а божественные указатели не проходили?

Это сообщение отредактировал(а) azesmcar - 28.4.2009, 23:34
PM   Вверх
toxx
Дата 28.4.2009, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: 4
Всего: 13



Цитата(Toxyrain @ 28.4.2009,  23:31)
демонические масивы

демонов чтоли на ОП изучаете?
PM MAIL   Вверх
Toxyrain
Дата 28.4.2009, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 15.4.2009

Репутация: нет
Всего: нет



Цитата(toxx @  28.4.2009,  23:33 Найти цитируемый пост)
демонов чтоли на ОП изучаете? 

типо того =)

Цитата(azesmcar @  28.4.2009,  23:31 Найти цитируемый пост)
Что значит заполнять строку от центра?

тоесть есть строка например "edcba" ей элементы соответсвенно соответсвуют номерам 0 1 2 3 4, теперь нужно эти элементы располодить так чтобы 0й элемент находился в середине строки элементы кратные 2 слева от 0-го элемента а элементы не четные справа, только вместо строки "edcba"  должна быть демоническая строка и соответсвенно кол-во элементов вводим вначале программы тоесть если брать эту строку то должно выйти " a c e d b" тоесть номера элементов 4 2 0 1 3

PM MAIL   Вверх
azesmcar
Дата 28.4.2009, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Ясно..вот держи
Код

#include <iostream>
#include <cstring>

void center_copy(char* pc, long length)
{
    //Заводим новый буфер (чтобы скопировать в него)
    char* pcn = new char[length + 1];

    //Заводим две переменные - правый индекс и левый индекс. Сперва они равны центральному индексу
    int r = length / 2;
    int l = r;

    //Устанавливаем центральный элемент
    pcn[r] = pc[0];

    //Итерация по тексту
    for (int i = 1; i < length; i += 2)
    {
        //Увеличиваем индекс, записываем правый элемент
        pcn[++r] = pc[i];
        //Уменьшаем индекс, записываем левый элемент
        pcn[--l] = pc[i + 1];
    }

    //0 - означающий конец строки
    pcn[ length ] = 0;

    //Копируем полученный буфер в переданный как аргумент функции буфер
    strcpy( pc, pcn );

    //Очищаем выделенную память
    delete [] pcn;

}

int main()
{
    char pc[] = "01234";

    center_copy( pc, strlen(pc) );

    std::cout << pc << std::endl;
}


PM   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0592 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.