我正在为Crysis Wars游戏编写一个新的服务器 - 客户端网络.我有一个函数将字符串居中到控制台窗口中每行支持的字符数.该窗口适合113个字符,但我已将函数中的最大字符宽度设置111为适合文本.
这是我的功能:
string Main::CenterText(string s)
{
return string((111 - s.length()) / 2, ' ') + s;
}
Run Code Online (Sandbox Code Playgroud)
这个功能来自我去年提出的一个问题,但我不确定我是否最终在过去的项目中使用它.
我试图在此上下文中使用此函数(该CryLogAlways函数只是将字符串记录到游戏/服务器日志文件并打印它):
CryLogAlways(CenterText(" ____ ____ _ __ _ _ __").c_str());
CryLogAlways(CenterText(" / _/__ / _(_)__ (_) /___ _( )| |/_/").c_str());
CryLogAlways(CenterText(" _/ // _ \\/ _/ / _ \\/ / __/ // //_> < ").c_str());
CryLogAlways(CenterText("/___/_//_/_//_/_//_/_/\\__/\\_, / /_/|_| ").c_str());
CryLogAlways(CenterText(" /___/ ").c_str());
Run Code Online (Sandbox Code Playgroud)
但输出是:

同样,@ deW1请求,我有一个类似的输出CryLogAlways(CenterText("X").c_str());:

为什么我得到这个输出,我该如何解决这个问题?
我使用了一个我在这个问题中找到的函数,适用于用"%20"替换所有空格(可能会更有效地完成!):
## Heading ##std::string Main::SpacesForWeb(std::string text) {
for (std::string::iterator it = text.begin(); it != text.end(); ++it) {
if (*it == ' ') {
*it = '%20';
}
}
return text;
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将它用于字符串时Local Live Test Server,输出是这样的:

我的最后一个问题涉及string的问题,并发现string被typedef编为指向内部CryString在游戏SDK类型我使用(Cryengine2引擎).我现在正在使用std::string以解决这个问题.
此问题也反映在我转换发生后使用的数据库中,并将数据发送到数据库:

为什么我不能%20以这种方式使用(也许还有其他URL编码符号),我怎样才能使它工作?我试图对此进行一些研究以便自己解决这个问题,但是没有任何相关内容出现.
我已尝试使用*it = (char)"%20";原位*it = (char)"%20";,但是这实际上删除了0出现在字符串中而不是替换空格%20.