我目前正在用c ++制作文字游戏。我正在使用一个函数,一次打印一个字符(给出一个“叙述”效果),这也是一个由该函数定义的某个条件的新行。
这是功能:
void smart_print(const std::string& str, int spacer)//str is the printed message. spacer is the amount of space you want at the beginning and at the end of the cmd window
{
int max = Console::BufferWidth - (spacer * 2);
int limit = max;
ut.spacer(5);//this prints 5 spaces
for (int i = 0; i != str.size(); ++i)//this loop prints one character of the string every 50 milliseconds. It also checks if the limit is exceeded. If so, print new line
{
if (limit < 0)
{
cout << endl;
ut.spacer(5);
limit = max;
}
limit--;
std::cout << str[i];
Sleep(50);
}
}
这个函数的问题在于它会切断单词,因为每当“limit”变量小于0时它都会换行,无论是否有不完整的单词。
我制定了一种方案来试图弄清楚它应该如何正常工作,但我无法将其“翻译”成代码。
1)分析字符串,并检查第一个字的长度
2)计算字符并在有空格时停止计数
3)计算是否可以打印单词(通过减去最大字母数)
4)如果超出限制,请转到新行。否则,继续打印一个字母
我真的无法设法做出这样的功能。我希望有人可以帮助我:P 提前谢谢。
答案 0 :(得分:0)
我认为您应该使用std::isspace
方法检查当前字符是否为空白:
// inside your for
if (limit < 0 && isspace(str[i]))
{
cout << endl;
ut.spacer(5);
limit = max;
}
limit--;
if(!isspace(str[i])) std::cout << str[i];
Sleep(50);
注意:我还没有对代码进行测试,所以我不能100%确定它是否正常工作。