Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Neotwalker
21 / 1 / 0
Регистрация: 22.12.2013
Сообщений: 134
#1

Вывести слова в обратном порядке - C++

23.07.2014, 19:29. Просмотров 1344. Ответов 5
Метки нет (Все метки)

Всем известно, что у каждого важного общественного деятеля есть собственный спичрайтер – существо, помогающее подготовить публичную речь, сделать ее более выразительной и интересной. Глава Ордена джедаев магистр Йода не исключение.
На первый взгляд может показаться, что спичрайтеру Йоды приходится тяжелее других: все-таки речь магистра своеобразна и ее изучение требует серьезных усилий. На самом деле все несколько проще. Спичрайтеру Йоды достаточно сначала придумать речь для обычного человека, после чего поменять порядок слов в каждом предложении на обратный. В силу того, что алгоритм преобразования обычной речи в речь магистра Йоды достаточно однообразен, спичрайтер решил автоматизировать этот процесс и попросил вас написать программу, которая будет преобразовывать речь, составленную им для обычного человека в речь для Йоды.
В единственной строке входного файла задана речь, составленная спичрайтером. Речь состоит из предложений, отделенных друг от друга точками (точка ставится сразу после последнего слова в предложении).
Каждое предложение состоит из слов. Предложение содержит по крайней мере одно слово. Соседние слова разделены ровно одним пробелом. Слово – непустая последовательность строчных латинских букв. Строка не содержит лишних пробелов. Гарантируется, что строка не пуста и ее длина не превосходит 20000 символов.
В одной строке выведите преобразованную для Йоды речь в соответствии с форматом входных данных. Следует строго соблюдать формат вывода речи, описанный во входных данных.

Пример ввода

you should solve this problem. its easy.

Пример вывода

problem this solve should you. easy its.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2014, 19:29     Вывести слова в обратном порядке
Посмотрите здесь:

Вывести слова в обратном порядке - C++
Привет всем. Я студент, помогите пожалуйста написать программу: дана строка состоящая из 30 слов между словами пробел и запятая вывести на...

Вывести слова в обратном порядке - C++
Здравствуйте, а можете помочь написать программу на С++, оч нужно, пожалуйста)) Задание: Пользователь вводит строку символов, вывести...

Вывести слова в строке в обратном порядке - C++
Привет всем. Помогите пожалуйста ! Дана строка состоящая из 30 слов между словами пробел и запятая вывести на экран слова в обратном порядке

Вывести слова в строке в обратном порядке - C++
#include "stdafx.h" #include<iostream> #include<conio.h> #include<string> #include <fstream> using namespace std; int...

Вывести строку, содержащую эти же слова, разделенные одним пробелом и расположенные в обратном порядке - C++
Здравствуйте. можете прокомментировать эту программу? #include "stdafx.h" #include <string> #include <iostream> using...

вывести слова - анаграммы из словаря, состоящего из пар слов(при чтении в обратном порядке образуется другое слово) - C++
Ребят, помогите пожалуйста написать прогу на С++=(в задании не было сказано что бы считывало с файла, поэтому, можно все, прямо в проге...

Вывести строку, содержащую эти же слова, но расположенные в обратном порядке. Записать полученную строку в другой файл - C++
Доброго времени суток! Крайне необходима помощь экспертов в С++! Кто может - не оставьте меня в беде))) Вот задания: ...

Отсортировать слова в обратном порядке - C++
Пользователь ряд слов,программа выводит их, отсортировав в обратном порядке. Как сделать такое?

Слова в обратном порядке (!не палиндром!) - C++
Задача состоит в следующем: определить символьный массив и ввести его с клавиатуры, затем подсчитать колличество символов 'e' (с этим...

Переставить слова из файла в обратном порядке - C++
Задание звучит так : Дан файл с неизвестным количеством слов и строк.Создать новый файл каждая строка которого получается из...

Расположить слова строки в порядке, обратном исходному. - C++
Здравствуйте,помогите пожалуйста. Задание: Расположить слова строки в порядке, обратном исходному.

Ввод слова и вывод его в обратном порядке - C++
символьные массивы


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Хедин
73 / 68 / 36
Регистрация: 17.05.2014
Сообщений: 301
23.07.2014, 20:09     Вывести слова в обратном порядке #2
Neotwalker, ну ок, давайте решать? Можно сделать как? В цикле отделяете слова, дописываете в начало строки. Затем прибавляете полученную строку в конечному тексту

Добавлено через 16 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
string inverseText(const string &original)
{
    string result = "", line = "", buff = "";
    int count = original.length();
    for (int i = 0; i < count; ++i)
    {
        if (original[i] == ' ')
        {
            line = (line == "" ? buff : buff + " " + line);
            buff = "";
        }
        else if (original[i] == '.')
        {
            line = (line == "" ? buff : buff + " " + line);
            buff = "";
            result += line + ". ";
            line = "";
        }
        else buff += original[i];
    }
    return result;
}
QGuest
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
23.07.2014, 20:14     Вывести слова в обратном порядке #3
Результат:
Вывести слова в обратном порядке

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <iostream>
#include <string>
#include <vector>
#include <conio.h>
 
using namespace std;
 
class StringUtils {
public:
 
    //Разделяет содержимое вектора разделителями
    static vector<vector<string>> split(vector<string> data, string delimiters) {
        vector<vector<string>> result;
        for (int i = 0; i < data.size(); i++) {
            result.push_back(split(data[i], delimiters));
        }
        return result;
    }
 
    //Разделяет строку на части разделителями (delimiters)
    static vector<string> split(string values, string delimiters) {
        vector<string> parts;
 
        string::size_type lastPos = values.find_first_not_of(delimiters, 0);
        string::size_type pos = values.find_first_of(delimiters, lastPos);
        while (string::npos != pos || string::npos != lastPos) {
            parts.push_back(values.substr(lastPos, pos - lastPos));
            lastPos = values.find_first_not_of(delimiters, pos);
            pos = values.find_first_of(delimiters, lastPos);
        }
 
        return parts;
    }
 
    //Объединяет вектор в строку с разделителем 
    static string combine(vector<string> data, string delimiter) {
        string result = "";
        for (int i = 0; i < data.size(); i++) {
            result += data[i] + ((i < data.size() - 1) ? delimiter : "");
        }
        return result;
    }
 
    //Объединяет содержимое вектора в в строки
    static vector<string> combine(vector<vector<string>> data, string delimiter) {
        vector<string> result;
        for (int i = 0; i < data.size(); i++) {
            result.push_back(combine(data[i], delimiter));
        }
        return result;
    }
 
    //Главная функция инвертирования текста
    static string inverse(string text) {
        
        //Разбор строки на вектор предложений (а предложения, в свою очередь, векторы слов)
        vector<vector<string>> data = split(split(text, "."), " ");
        
        //Вся магия
        //Перебор каждого предложения
        for (int i = 0; i < data.size(); i++) {
 
            //Перебор каждого слова в предложении до середины
            for (int j = 0; j < data[i].size() / 2; j++) {
                
                //Перестановка слов
                string temp = data[i][j];
                data[i][j] = data[i][data[i].size() - j - 1];
                data[i][data[i].size() - j - 1] = temp;
            }
        }
 
        //Возвращается готовая строка
        return combine(combine(data, " "), ". ") + ".";
    }
};
 
 
void main() {
    cout << StringUtils::inverse("Some text. Inverted. Bla bla. Wow its inverted string. Some some TEXT.");
    _getch();
}
gray_fox
What a waste!
1411 / 1140 / 55
Регистрация: 21.04.2012
Сообщений: 2,362
Завершенные тесты: 3
24.07.2014, 06:53     Вывести слова в обратном порядке #4
немного наркомании)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
 
#include <boost/tokenizer.hpp>
#include <boost/range/iterator_range.hpp>
#include <boost/range/adaptor/reversed.hpp>
#include <boost/range/adaptor/transformed.hpp>
#include <boost/range/algorithm/copy.hpp>
#include <boost/range/algorithm_ext/push_back.hpp>
 
 
template<typename Iterator>
struct string_view : boost::iterator_range<Iterator> {
 
   using boost::iterator_range<Iterator>::iterator_range;
   
   void assign(Iterator const b, Iterator const e) {
      *this = {b, e};    
   }
};
 
 
template<typename Sequence, typename Separator, typename OutputIterator>
OutputIterator join_copy(Sequence const& sequence, Separator const& separator, OutputIterator output) {
   auto first      = std::begin(sequence);
   auto const last = std::end(sequence);
   
   if (first != last) {
      output = boost::copy(*first, output);
      
      while (++first != last) {
         output = boost::copy(separator, output);
         output = boost::copy(*first, output);
      }
   }
   
   return output;
}
 
template<typename Container, typename Sequence, typename Separator>
auto join(Sequence const& sequence, Separator const& separator) {
   Container result;
   join_copy(sequence, separator, std::back_inserter(result));
   
   return result;
}
 
template<template<typename, typename...> class Container, typename ...Args, typename Sequence>
auto copy_range(Sequence const& sequence) {
   using sequence_value = typename boost::range_value<Sequence>::type;
   using container_type = Container<sequence_value, Args...>;
    
   return boost::copy_range<container_type>(sequence);    
}
 
 
int main() {
   std::string const text = "you should solve this problem. its easy.";
   
   using separator_type = boost::char_separator<char>;
   using iterator_type  = std::string::const_iterator;
   using value_type     = string_view<iterator_type>;
   using tokenizer_type = boost::tokenizer<separator_type, iterator_type, value_type>;
   
   join_copy(
         tokenizer_type(text, separator_type(".")) | boost::adaptors::transformed(
               [] (auto const sentence) {
                     return join<std::string>(
                           copy_range<std::vector>(tokenizer_type(sentence, separator_type(" "))) | boost::adaptors::reversed
                         , " ") + ".";
               })
       , " "
       , std::ostream_iterator<char>(std::cout));
   std::cout << std::endl;
}
http://coliru.stacked-crooked.com/a/1a16c76e8b999a89
Ilot
Модератор
Эксперт С++
1789 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
24.07.2014, 09:00     Вывести слова в обратном порядке #5
Как-то товарищи у вас все сложно. Позвольте малость подсократить историю:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <string>
#include <fstream>
#include <stack>
int main() {
    system("chcp 1251");
    std::stack<std::string> pul;
    std::string str;
    std::ifstream infile("text.txt");
    while(!infile.fail()) {
        if(!(infile >> str))
            break;
        if(str.find('.') != std::string::npos) {
            std::cout << str.substr(0, str.size() - 1);
            while(!pul.empty()) {
                std::cout << ' ' << pul.top();
                pul.pop();
            }
            std::cout << ". ";
        }
        else
            pul.push(str);
    }
    return 0;
}
W910
0 / 0 / 0
Регистрация: 27.11.2014
Сообщений: 16
01.07.2015, 16:15     Вывести слова в обратном порядке #6
Можно тоже самое, только с вводом
C
1
gets(str);
?
Yandex
Объявления
01.07.2015, 16:15     Вывести слова в обратном порядке
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru