0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 12
1

Напечатать все слова, отличные от последнего, предварительно преобразовав каждое из них по заданному правилу

26.03.2019, 17:22. Показов 2217. Ответов 8

Студворк — интернет-сервис помощи студентам
Задача такая: Задан текст. Напечатать все слова, отличные от последнего, предварительно преобразовав каждое из них по следующему правилу: перенести последнюю букву в начало слова, используя функции. Перенести последний символ то я смог, написал, а вот с условием про последнее слово возникают проблемы, как это можно реализовать?

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
#include <iostream>
#include <sstream>
#include <string>
#include <cstring>
 
using namespace std;
 
int main()
{
    string s;
    char c = '-';
    cout << "Enter text: "; 
    getline(cin, s);
    int n = s.length();
    stringstream ss(s);
  
    while (ss >> s) {
        s.insert(0, 1, c);
    swap(*s.begin(), *(s.end()-1));
    s.erase((s.end()-1));
    cout << s << ' ';
    }
    
    
    cout << s << endl;
 
    cout << endl;
 
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2019, 17:22
Ответы с готовыми решениями:

Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждое из них по заданному правилу
Дан текст, содержащий от 2 до 30 слов, в каждом из которых от 2 до 10 латинских букв; между...

ООП. Напечатать слова, отличные от последнего слова, предварительно преобразовав каждое из них по правилу
Напечатать слова, отличные от последнего слова, предварительно преобразовав каждое из них по...

Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждое из них
Дан текст, содержащий от 2 до 30 слов, в каждом из которых от 2 до 10 латинских букв; между...

Напечатать все слова, отличные от последнего слова, предварительно преобразовать каждое из них по следующему правилу
Задан текст. Напечатать все слова, отличные от последнего слова, предварительно преобразовать...

8
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
26.03.2019, 17:29 2
THeUnitedStatem, функцией find_last_of можно найти индекс последнего пробела, ну и следовательно последнее слово
0
0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 12
26.03.2019, 17:35  [ТС] 3
У меня слова вводятся последовательно, до окончания цикла неизвестен последний пробел(, да и индекса нет, там же string
0
5795 / 3215 / 1328
Регистрация: 07.02.2019
Сообщений: 8,122
26.03.2019, 17:37 4
Цитата Сообщение от THeUnitedStatem Посмотреть сообщение
а вот с условием про последнее слово возникают проблемы, как это можно реализовать?
std::copy_if
0
0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 12
26.03.2019, 17:44  [ТС] 5
Цитата Сообщение от zayats80888 Посмотреть сообщение
std::copy_if
Слышал только о replace_copy_if, а что делает copy_if?
0
5795 / 3215 / 1328
Регистрация: 07.02.2019
Сообщений: 8,122
26.03.2019, 17:46 6
Цитата Сообщение от THeUnitedStatem Посмотреть сообщение
а что делает copy_if?
copy_if
0
0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 12
26.03.2019, 17:57  [ТС] 7
Цитата Сообщение от zayats80888 Посмотреть сообщение
copy_if
и зачем же она нужна? она лишь копирует элементы диапазона, если б входные данные были определены, то да, поможет, а так пока не понимаю
0
5795 / 3215 / 1328
Регистрация: 07.02.2019
Сообщений: 8,122
26.03.2019, 18:49 8
Лучший ответ Сообщение было отмечено THeUnitedStatem как решение

Решение

THeUnitedStatem
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
struct pred {
    string& s;
    bool operator()(string& str) {
        if (str == s) return true;
        else {
            str = str.back() + str.substr(0, str.size() - 1);
        }
        return false;
    }
};
 
int main()
{
    string text;
    getline(cin, text);
    stringstream iss(text);
 
    istream_iterator<string> bos(iss);
    istream_iterator<string> eos;
    vector<string> words(bos, eos);
 
    remove_copy_if(words.begin(), words.end(), ostream_iterator<string>(cout, " "), pred({ words.back() }));
}
Добавлено через 2 минуты
то же самое, только copy_if
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
struct pred {
    string& s;
    bool operator()(string& str) {
        if (str != s) return true;
        else {
            str = str.back() + str.substr(0, str.size() - 1);
        }
        return false;
    }
};
 
int main()
{
    string text;
    getline(cin, text);
    stringstream iss(text);
 
    istream_iterator<string> bos(iss);
    istream_iterator<string> eos;
    vector<string> words(bos, eos);
 
    copy_if(words.begin(), words.end(), ostream_iterator<string>(cout, " "), pred({ words.back() }));
}
2
0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 12
26.03.2019, 19:04  [ТС] 9
Так вот как, понял, был не прав, благодарю)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2019, 19:04
Помогаю со студенческими работами здесь

Напечатать все слова последовательности, предварительно преобразовав каждое из них по следующему правилу
Задача: Код: #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main(){ char...

Напечатать все слова отличные от последнего слова, предварительно перенести последнюю букву в начало слова
Дано текст, содержащий от 2 до 30 слов, в каждом из которых от 2 до 10 латинских букв, между...

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

Напечатать все слова, которые отличаются от последнего, но предварительно надо уничтожить из них все последующие вхождения первой буквы
Дано рядок символів,який складається з окремих слів,відокремлених пробілом. Після останнього слова...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru