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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите решить задачу на строки, Последовательность слов в предложении 
V
    Опции темы
Azadof
Дата 1.5.2009, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите пожалуйста решить задачу на строки с таким условием:

Дана последовательность, содержащая от 1 до 30 слов. Слова разделены одним или несколькими пробелами. За последним словом – точка. Напечатать эту же последовательность слов, но в обратном порядке.
PM MAIL   Вверх
azesmcar
Дата 1.5.2009, 23:07 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Код

#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <functional>

struct reverse: std::unary_function<std::string, std::string>
{
    std::string operator ()(const std::string& r) {
        std::string c = r;
        std::reverse(c.begin(), c.end());
        return c;
    }
};

int main()
{
    std::string words = "hello my dear world.";
    std::stringstream stream;
    stream << ( words );
    std::transform(
        std::istream_iterator<std::string>(stream),
        std::istream_iterator<std::string>(),
        std::ostream_iterator<std::string>(std::cout, " "),
        reverse()
    );
}

А вообще в центр помощи с таким вопросами
PM   Вверх
toxx
Дата 1.5.2009, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



блин ступил-_-

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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

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



Код

//---------------------------------------------------------------------------
#include <iostream.h>
#include <string.h>
#include <stdio.h>
//---------------------------------------------------------------------------
int main()
{
        char s[256];//строка исходная
        char words[30][256];//сюда будем записывать слова
        char *d=" .";//разделители
        int count=0;//количество слов
        cout<<"Enter your string: "<<endl;
        cin.getline(s, 256);//прочитали строку исходную
        char *p;
        p=strtok(s, d);//первое слово
        strcpy(words[count++], p);//записываем первое слово
        while(p=strtok(NULL, d))//остальные слова
                strcpy(words[count++], p);//записываем остальные слова
        for (int i=count-1; i>=0; i--)//в обратном порядке выводим
                cout<<words[i]<<" ";
        cout<<"."<<endl;//точку ставим
        system("PAUSE");
        return 0;
}
//---------------------------------------------------------------------------


Это сообщение отредактировал(а) Dmi3ev - 1.5.2009, 23:44


--------------------

PM MAIL   Вверх
mes
Дата 2.5.2009, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Azadof @  1.5.2009,  21:41 Найти цитируемый пост)
Напечатать эту же последовательность слов, но в обратном порядке. 

azesmcar, a задача то - изменить порядок слов, а не инвертировать каждое слово  smile  smile 



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


uploading...
****


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

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



mes

Цитата

Напечатать эту же последовательность слов

Цитата

a задача то - изменить порядок слов

Возможно вы правы, но не сочетается smile 
PM   Вверх
stat007
Дата 2.5.2009, 11:34 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



самый оптимальный вариант:

Код

#include<iostream>
#include<string>
#include <algorithm>
using namespace std;
int main()
{
    string s;
    cout<<"Enter string: "<<endl;
    getline(cin,s);
    reverse(s.begin(),s.end());
    cout<<s;
    cout<<endl;
    return 0;
}

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


любитель
****


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

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



Цитата(azesmcar @  2.5.2009,  09:48 Найти цитируемый пост)
Возможно вы правы, но не сочетается smile  

Цитата(Azadof @  1.5.2009,  21:41 Найти цитируемый пост)
эту же последовательность слов, но в обратном порядке

имхо, "в обратном порядке" относится к слову последовательность,
т.е. если последовательность 1;2;3;4;5;6, то она же в обратном порядке будет 6;5;4;3;2;1

но точно сказать, что хотел автор, может лишь автор smile 
напросилась аналогия : лучше гор могут быть только горы...©Высоцкий

Добавлено через 2 минуты и 28 секунд
Цитата(stat007 @  2.5.2009,  10:34 Найти цитируемый пост)
самый оптимальный вариант:

 smile, за одним маленьким исключением, код напечатает инверсированную последовательность букв, а не слов  smile 


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


Опытный
**


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

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



Цитата

за одним маленьким исключением, код напечатает инверсированную последовательность букв, а не слов

Верно. Просто я понял его так.. smile 
PM MAIL   Вверх
Dmi3ev
Дата 2.5.2009, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

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



Я думаю, что задача была такая
Допустим строка на входе:
Я пошел гулять.
На выходе:
гулять пошел Я.
Потому как просто перевернуть строку можно с помощью strrev() и скорее всего задача заключалась в изменении порядка слов (при этом сами слова изменять не нужно было)... Хотя автору виднее...
Я решил именно эту задачу... Я так это все понял...


--------------------

PM MAIL   Вверх
zim22
Дата 2.5.2009, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(Dmi3ev @  2.5.2009,  13:10 Найти цитируемый пост)
Я думаю, что задача была такая

я тоже так думаю. 

Я бы её так решил, хотя вариант azesmcar мне больше нравится.
Код

#include <deque>
#include <algorithm>
#include <string>
#include <iostream>
#include <sstream>

int main()
{
  std::string string("my very big  and       beatiful  string.");  
  std::istringstream is(string);
  std::deque<std::string> deque;

  std::copy(std::istream_iterator<std::string>(is),
            std::istream_iterator<std::string>(),
            front_inserter(deque));

  std::copy(deque.begin(), 
            deque.end(), 
            std::ostream_iterator<std::string>(std::cout, " "));

    return 0;
}


Это сообщение отредактировал(а) zim22 - 2.5.2009, 15:03


--------------------
PM MAIL   Вверх
Dmi3ev
Дата 2.5.2009, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

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



А я бы ее решил, как решил, хотя все варианты нормальные  smile 


--------------------

PM MAIL   Вверх
azesmcar
Дата 2.5.2009, 17:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



zim22

А почему не через reverse_iterator?

Код

deque.assign(
        std::istream_iterator<std::string>(is),
        std::istream_iterator<std::string>());

std::copy(deque.rbegin(), deque.rend(), std::ostream_iterator<std::string>(std::cout, " "));


Добавлено через 6 минут и 16 секунд
Ну если нужен ввод с клавиатуры - тут вообще писать нечего smile 
Код

#include <vector>
#include <algorithm>
#include <string>
#include <iostream>
#include <sstream>

int main()
{
    std::vector<std::string> data;
    
    data.assign(
        std::istream_iterator<std::string>(std::cin),
        std::istream_iterator<std::string>()
    );

    std::copy(
        data.rbegin(), data.rend(),
        std::ostream_iterator<std::string>(std::cout, " ")
    );
}

PM   Вверх
zim22
Дата 2.5.2009, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(azesmcar @  2.5.2009,  17:53 Найти цитируемый пост)
А почему не через reverse_iterator?

не подумал об этом. 

Я не понимаю одного, почему используя функцию assign вектору успешно присваиваются значения из istringstream:
Код

std::string string("my very big  and       beatiful  string.");  
std::istringstream is(string);    

std::vector<std::string> data;
data.assign(std::istream_iterator<std::string>(is),
            std::istream_iterator<std::string>());        


А прямая инициализация в конструкторе вектора не работает... Хотя и там и там передаётся пара итераторов.
Код

std::vector<std::string> data(std::istream_iterator<std::string>(is),
                              std::istream_iterator<std::string>()
                              );



Это сообщение отредактировал(а) zim22 - 2.5.2009, 21:40


--------------------
PM MAIL   Вверх
Azadof
Дата 2.5.2009, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ребята! Огромное всем спасибо! Имелось ввиду, что только слова переставить : Всем Привет - Привет Всем. Вот так, сори что сразу не предупредил, не знал, что будут разногласия!))))))
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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