我一直在尝试用C为一个gameserver DLL做一个函数,它在将新字符串返回给Lua进行处理之前将给定的文本对齐到中心。我花了很多时间在各种网站上查看示例,但只能找到'cout',它在控制台应用程序中打印它,我不希望它这样做。
我是C的新手,我真的很困惑如何处理这个问题。如果有人能提供一个例子并解释它是如何工作的,我将能够学习如何在未来做到这一点。
基本上,它是这样做的:
1.将我们的字符串从Lua转发到C++。
- C++将我们刚刚转发的字符串居中。
1.将完成的字符串返回给Lua。
这是我一直在尝试做的一个例子:
int CScriptBind_GameRules::CentreTextForConsole(IFunctionHandler *pH, const char *input)
{
if (input)
{
int l=strlen(input);
int pos=(int)((113-l)/2);
for(int i=0;i<pos;i++)
std::cout<<" ";
std::cout<<input;
return pH->EndFunction(input);
}
else
{
CryLog("[System] Error in CScriptBind_GameRules::CentreTextForConsole: Failed to align");
return pH->EndFunction();
}
return pH->EndFunction();
}
字符串
但它会将文本打印到控制台,而不是转发回完整的字符串。
4条答案
按热度按时间cyvaqqii1#
我假设你已经知道如何将一个字符串从Lua传递到C++,并将结果从C++返回到Lua,所以我们唯一需要处理的部分是生成居中的字符串。
然而,这很容易:
字符串
uurity8g2#
这里有另一种方法,将确保文本在给定的宽度内居中,并在左右填充空格。
字符串
这可以写得更优雅或简洁。
n9vozmp43#
字符串
gmol16394#
下面是一个使用std::format(C++20)的更现代的解决方案。
字符串