Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/40: Рейтинг темы: голосов - 40, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 15.08.2020
Сообщений: 3
1

Вывести названия книг в обратном порядке

15.08.2020, 13:26. Показов 7455. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Не могу понять, правильно ли я решаю следующую задачу: "Напишите программу, которая считывает названия трёх книг по одному в строке и выводит их в обратном порядке, тоже по одному в строке". Пример:

Ввод:

book 1

book 2

book 3

Вывод:

book 3

book 2

book 1

Мой код:


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
#include <iostream>
#include <string>
 using namespace std;
int main()
{
    string book1, book2, book3, probel;
 
    getline (cin, book1);
      cout << probel << endl;
    getline (cin, book2);
      cout << probel << endl;
    getline (cin, book3);
      cout << probel << endl;
    
    cout << book3 << endl;
      cout << probel << endl;
    cout << book2 << endl;
      cout << probel << endl;
    cout << book1 << endl;
      cout << probel << endl;
    
    return 0;
    
}
Есть ли более корректные варианты решения задачи?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.08.2020, 13:26
Ответы с готовыми решениями:

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

Бинарные файлы. Вывести названия книг определенного автора, изданных до 2000 года. Определить долю книг
помогите пожалуйста: В файле хранятся сведения о личной библиотеке: фамилия автора, название,...

Вывести числа в обратном порядке, при этом переставив все цифры в каждом числе в обратном порядке
Чтобы Вовочка не скучал на уроке информатики, Иван Иваныч специально для него к каждому уроку...

Вывести названия дней недели в обратном порядке
Ввести названия дней недели в массив, вывести их на экран в строку. Далее с новой строки вывести их...

15
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
15.08.2020, 13:27 2
Цитата Сообщение от lil kennedy Посмотреть сообщение
cout << probel << endl;
а чё за пробел?
0
0 / 0 / 0
Регистрация: 15.08.2020
Сообщений: 3
15.08.2020, 13:29  [ТС] 3
Между строками пробел
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
15.08.2020, 13:38 4
Лучший ответ Сообщение было отмечено lil kennedy как решение

Решение

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
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#define REVERSE_METHOD // если объявлено - весь vector будет перестроен задом на перёд 
//если нет - будет просто вывод в обратном порядке
int main()
{
    const size_t count = 5;
    std::vector<std::string> book_titles(count);
    for (std::string& title : book_titles)
    {
        std::getline(std::cin, title);
        std::cin.ignore(); // пробел между строками
    }
 
    std::cout << "------------------------" << std::endl;
 
#ifdef REVERSE_METHOD
    std::reverse(book_titles.begin(), book_titles.end());
    for (std::string& title : book_titles)
    {
        std::cout << title << std::endl;
    }
#else
    for (auto it = book_titles.end() - 1; it >= book_titles.begin(); it--)
    {
        std::cout << *it << std::endl;
    }
#endif
}
1
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.08.2020, 14:34 5
Цитата Сообщение от lil kennedy Посмотреть сообщение
string book1, book2, book3,
Массивы, вектора не?

Добавлено через 1 минуту
Цитата Сообщение от lil kennedy Посмотреть сообщение
Между строками пробел
У getline есть параметр разделитель delim
0
0 / 0 / 0
Регистрация: 15.08.2020
Сообщений: 3
15.08.2020, 14:54  [ТС] 6
Спасибо всем за ответы!
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.08.2020, 15:09 7
Цитата Сообщение от AndryS1 Посмотреть сообщение
C++
1
std::cin.ignore(); // пробел между строками
А пробел ли? Или может EOF ?
В ignore стоит передавать параметры иначе может работать не корректно.
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
15.08.2020, 15:43 8
Цитата Сообщение от Avazart Посмотреть сообщение
А пробел ли
ну, вообще я думал что "пробел" имелась ввиду пустая строка, поэтому решил, что так будет лучше
перед этим можно ещё написать std::cin.clear(), чтобы строка точно проигнорировалась
0
731 / 432 / 207
Регистрация: 19.12.2016
Сообщений: 1,700
15.08.2020, 15:49 9
А можно еще вот так. Этот пример я написал просто так, не используйте его.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
using namespace std;
class Book 
{
private:
    string name;
public:
    Book(const string &nm = "null") : name(nm) {};
    void SetName()
    {
        getline(cin,name);
    }
    ~Book() { std::cout << name << endl; }
};
int main() {
    {
        Book a[3];
        for (int i = 0; i < 3; i++)
            a[i].SetName();
    }
    return 0;
}
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.08.2020, 15:52 10
ram876, Не стоит так делать, это калечно ...
0
731 / 432 / 207
Регистрация: 19.12.2016
Сообщений: 1,700
15.08.2020, 16:43 11
Avazart, Поэтому и написал, что не стоит его использовать. Но он выполняет именно то, что надо. Работает как стек).

Добавлено через 33 минуты
Цитата Сообщение от AndryS1 Посмотреть сообщение
#ifdef REVERSE_METHOD
Цитата Сообщение от AndryS1 Посмотреть сообщение
#else
А что это за директивы? Много где видел, но знаю лишь про то, что похожие формы используются в заголовочных файлах, чтобы инклуды друг друга зря не вызывали. Где про это можно поподробнее прочитать?

Добавлено через 13 минут
Все, сам нашел, пошел разбираться.
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
15.08.2020, 16:43 12
Цитата Сообщение от ram876 Посмотреть сообщение
А что это за директивы
это препроцессор, как видите, я вначале кода объявил в 5 строке
C++
1
#define REVERSE_METHOD
поскольку оно объявлено, операция #ifdef (if defined) подставит код в блоке до #else, если убрать строку #define REVERSE_METHOD, вы получите код без поворота задом наперёд вектора (я сделал 2 варианта решения в одном коде)
Цитата Сообщение от ram876 Посмотреть сообщение
похожие формы используются в заголовочных файлах
Чтобы избежать дублирования кода (написал 1 раз, запомнил что ты это писал, если скажут писать ещё раз, проигнорь)
Цитата Сообщение от ram876 Посмотреть сообщение
Где про это можно поподробнее прочитать
вот все препроцессоры
Условная подстановка кода (#ifdef, #else, #endif)
Макросы (#define PI 3.14)
Инклуды
#pragma(это определяется реализацией)
#error (полезно, чтобы находить ошибки на времени компиляции)
Дичь, чтобы запутать
1
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.08.2020, 21:23 13
Цитата Сообщение от ram876 Посмотреть сообщение
А что это за директивы?
https://www.cyberforum.ru/blogs/18334/blog100.html
1
0 / 0 / 0
Регистрация: 11.12.2019
Сообщений: 4
07.06.2021, 12:06 14
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
 using namespace std;
int main()
{
    string book1, book2, book3;
 
    getline (cin, book1);
    getline (cin, book2);
    getline (cin, book3);
    
    cout << book3 << endl;
    cout << book2 << endl;
    cout << book1 << endl;
    
    return 0;
}
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,713
07.06.2021, 12:25 15
colonel666, Вы забыли, что после каждой строки во вводе есть пустая строка.

Цитата Сообщение от AndryS1 Посмотреть сообщение
for (auto it = book_titles.end() - 1; it >= book_titles.begin(); it--)
У контейнера есть реверсный итератор
C++
1
for (auto it = book_titles.rbegin(); it !=book_titles.rend(); ++it)
0
0 / 0 / 0
Регистрация: 11.12.2019
Сообщений: 4
07.06.2021, 13:03 16
Эта задача с яндекс практикума и это единственное решение которое система оценила как правильное
вот решение автора курса:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
 
using namespace std;
 
int main() {
    string a, b, c;
    getline(cin, a);
    getline(cin, b);
    getline(cin, c);
    cout << c << endl
         << b << endl
         << a << endl;
}
взято отсюда:https://pastebin.com/rqhw4Ej8
0
07.06.2021, 13:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.06.2021, 13:03
Помогаю со студенческими работами здесь

Вывести числа обратном порядке, при этом переставив все цифры в каждом числе в обратном порядке
Добрый день. Не могу понять алгоритм решения данной задачи, помогите пожалуйста. Заданы пять...

Найти и вывести названия книг данного автора
Имеется информация о книгах: автор, название, издательство, год издания, количество страниц. Найти...

Записи: вывести названия книг данного автора, изданных с N-го года
Даны сведения о книгах: фамилия автора, название и год издания и цена. Найти: названия книг данного...

Вывести названия книг заданного автора, изданных с 1960 года
Дан файл содержащий сведения о книгах. Нужно вывести названия книг заданного автора, изданных с...

Вывести фамилии авторов и названия книг, изданных до 1980 года, по которым нет запросов
О каждой книге имеются следующие сведения: фамилия и инициалы автора, название, год издания и...

Написать программу, выдающую следующую информацию: местонахождение книги автора Х названия У; список книг автора Z в алфавитном порядке названий
Создать файл, содержащий сведения о коллекции книг. Структура записи: шифр книги, автор, название,...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru