#c #console #message
Вопрос:
Приведенный ниже код будет заключен std::string message
в саморегулирующуюся коробку с двойной подкладкой, как в эпоху DOS старой школы.
Как я могу передать этой функции пользовательское текстовое сообщение, например Msg_Box(print this custom text);
?
#include <iostream>
#include <string>
void Msg_Box()
{
// Box edges and corners (all double thick line)
// T for top, B for bottom, L for left, R for right
const char TB = 'xCD'; // 205
const char LR = 'xBA'; // 186
const char TL = 'xC9'; // 201
const char TR = 'xBB'; // 187
const char BL = 'xC8'; // 200
const char BR = 'xBC'; // 188
std::string message = "To be, or not to be...";
std::string margin = " ";
std::string line(message.length() 2 * margin.length(), TB);
std::cout << TL << line << TR << std::endl;
std::cout << LR << margin << message << margin << LR << std::endl;
std::cout << BL << line << BR << std::endl;
std::cout << std::endl;
}
int main()
{
Msg_Box();
return 0;
}
Ответ №1:
Хе-хе, ты уже проделал тяжелую работу! Вы можете передать такое сообщение :
#include <iostream>
#include <string>
#include <sstream>
// pass a std::string to Msg_Box
// do it by reference to avoid copying.
// and make it const because you will
// not be changing the content of the string
void Msg_Box(const std::stringamp; message)
{
// Box edges and corners (all double thick line)
// T for top, B for bottom, L for left, R for right
const char TB = 'xCD'; // 205
const char LR = 'xBA'; // 186
const char TL = 'xC9'; // 201
const char TR = 'xBB'; // 187
const char BL = 'xC8'; // 200
const char BR = 'xBC'; // 188
std::string margin = " ";
std::string line(message.length() 2 * margin.length(), TB);
std::cout << TL << line << TR << std::endl;
std::cout << LR << margin << message << margin << LR << std::endl;
std::cout << BL << line << BR << std::endl;
std::cout << std::endl;
}
int main()
{
std::ostringstream os;
os << "The answer is " << 42;
Msg_Box(os.str());
return 0;
}
Комментарии:
1. @Пепиджин Крамер Спасибо. Это работает. Побочные эффекты: самонастраивающаяся часть хороша только для одной строки текста. /n сломает поле.
2. Забавно, но это возвращает меня на 30 лет назад. Я думаю, что тогда я написал мини-оконные системы с использованием ascii-искусства (и цветов/теней). В каком-то смысле тогда это было проще, я мог получить доступ к частям экрана непосредственно в памяти.
3. @Пепиджин Крамер — еще один побочный эффект, который нельзя использовать с ‘<.. у вас есть какое-нибудь быстрое решение?
4. Да, в качестве быстрого решения используйте острингстрим. Я обновил пример.