C ++如何在没有砍字的情况下换行

时间:2015-10-11 18:09:40

标签: c++

我目前正在用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 提前谢谢。

1 个答案:

答案 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%确定它是否正常工作。