Я программирую новую сеть сервер-клиент для игры Crysis Wars.
У меня есть функция, которая центрирует строку по количеству символов, поддерживаемых на строку в окне консоли.
Окно вмещает 113 символов, но я установил максимальную ширину символов в моей функции 111
как хорошо вписаться в текст.
Это моя функция:
string Main::CenterText(string s)
{
return string((111 - s.length()) / 2, ' ') + s;
}
Эта функция от вопрос, который я задал в прошлом году, но я, однако, не уверен, в конечном итоге я использовал его или нет в прошлых проектах.
Я пытаюсь использовать эту функцию в этом контексте ( CryLogAlways
функция просто записывает строку в лог-файл игры / сервера и печатает ее):
CryLogAlways(CenterText(" ____ ____ _ __ _ _ __").c_str());
CryLogAlways(CenterText(" / _/__ / _(_)__ (_) /___ _( )| |/_/").c_str());
CryLogAlways(CenterText(" _/ // _ \\/ _/ / _ \\/ / __/ // //_> < ").c_str());
CryLogAlways(CenterText("/___/_//_/_//_/_//_/_/\\__/\\_, / /_/|_| ").c_str());
CryLogAlways(CenterText(" /___/ ").c_str());
Однако вывод:
Точно так же, как @ deW1 просил, у меня есть аналогичный вывод с CryLogAlways(CenterText("X").c_str());
:
Почему я получаю этот вывод, и как я могу это исправить?
Вы используете тип string
неквалифицированный. Я предполагал, что у вас есть using namespace std
где-то (против лучшей практики), что сделало бы string
Ссылаться на std::string
, Но, видимо, это не так, и у вас есть неквалифицированное имя string
определены для что-то (вопрос не показывает, что), который ведет себя аналогично std::string
(то есть .length()
а также .c_str()
). Тем не менее, аргументы конструктора этого что-то кажется, в обратном порядке к тем из std::string
,
Если вы хотите, чтобы ваша функция работала со стандартными строками библиотеки, скажите явно:
std::string Main::CenterText(std::string s)
{
return std::string((111 - s.length()) / 2, ' ') + s;
}
Это яркий пример того, почему крайне полезно использовать явную квалификацию для std
типы.
В соответствии с C ++ Reference, вы правы.
Как указано в комментариях, для используемой строковой реализации аргументы переключаются.
Во втором примере вы печатаете знак (111-1) / 2 = 55 = ‘7’ для » = 32 раза.
Поменяйте местами аргументы
string(' ',(111 - s.length()) / 2)
и это должно работать лучше.