May 19, 2023

Решение задачи

Тема: Печать текста в C++

Задача очень похожа на программу Hello world. Отличие в том, что здесь надо напечатать несколько строк текста. Сам символ перевода строки не может содержаться в обычных строковых литералах, поэтому в программе его придётся заменить на \n. Можно просто вывести каждую строчку отдельно:

#include <iostream> int main() { std::cout << "C++ is a general-purpose programming language with a bias towards systems programming that\n"; std::cout << " - is a better C\n"; std::cout << " - supports data abstraction\n"; std::cout << " - supports object-oriented programming\n"; std::cout << " - supports generic programming.\n"; }

Однако писать каждый раз std::cout утомительно. В конструкции std::cout поддерживается вывод нескольких величин сразу. Можно оставить только самый первый std::cout, а остальные строки вывести через <<:

#include <iostream> int main() { std::cout << "C++ is a general-purpose programming language with a bias towards systems programming that\n" << " - is a better C\n" << " - supports data abstraction\n" << " - supports object-oriented programming\n" << " - supports generic programming.\n"; }

Здесь мы нарочно для лучшей читаемости отформатировали программу так, чтобы символы << стояли друг под другом.

Рассмотрим ещё два способа решить задачу. Строковые константы, расположенные просто друг за другом, автоматически конкатенируются при компиляции программы. Так "Hello," " world!" даст "Hello, world!. Поэтому можно написать так:

#include <iostream> int main() { std::cout << "C++ is a general-purpose programming language with a bias towards systems programming that\n" " - is a better C\n" " - supports data abstraction\n" " - supports object-oriented programming\n" " - supports generic programming.\n"; }

Можно ли избавиться от необходимости писать \n в конце каждой строки? Да, для этого можно воспользоваться raw-литералами. Они могут содержать внутри без экранирования любые символы, в том числе перевод строки, лишь бы они были отличны от выбранных ограничителей. Такие литералы предваряются символом R, а в начале и в конце должна стоять произвольно выбранная одинаковая последовательность символов и круглые скобки. Например, raw(...)raw, или ~~~(...)~~~:

#include <iostream> int main() { std::cout << R"~~~(C++ is a general-purpose programming language with a bias towards systems programming that - is a better C - supports data abstraction - supports object-oriented programming - supports generic programming. )~~~"; }