无法转到文本换行中的新行

时间:2018-12-15 04:38:07

标签: c++

我不知道自己在做什么错,也无法自己解决。

void text_printer(char text[], int wrap_size)
{
    bool space_check;
    for (int sub = 0; text[sub] != '\0'; sub++)
    {
        space_check = false;

        if (sub % wrap_size == 0 && sub != 0)
            space_check = true;

        if (space_check == true && text[sub] == ' ')
        {
            cout << endl;
        }
        else
        {
            cout << text[sub];
        }
    }
}

第二条if语句在应该执行的时候不执行。

ah yes you are here for tea

如果我将其传递给它,则输出时它不会改变。

它可以很好地编译并且没有错误,所以我认为这是我的代码有问题,但是我不知道它是什么。

2 个答案:

答案 0 :(得分:2)

您的代码遇到了一些麻烦。我将描述其中之一。 @artm描述了另一个。如果wrap_size为9怎么办,输入行就像“ 12345678901234567 12 45 78 01”。然后您的代码将像这样拆分它

12345678901234567
12
45 78 01

我想这不是您想要的,而必须是

12345678901234567
12 45 78
01

所以正确的解决方案应该像下面这样

void text_printer(char text[], int wrap_size)
{
    for (int sub = 0, count = 0; text[sub] != '\0'; sub++, count++)
    {
        bool space_check = count >= wrap_size; 
        if (space_check && text[sub] == ' ')
        {
            cout << endl;
            count = 0;
        }
        else
        {
            cout << text[sub];
        }
    }
}

答案 1 :(得分:0)

此操作无效,因为您在此逻辑上有缺陷if (space_check == true && text[sub] == ' ')space_check == truetext[sub]不是空格时会发生什么,现在space_check将被重置转到下一个循环的false,您将错过新行。

这是正确处理逻辑的一种方法。添加一个新变量idx来跟踪最后一个空格字符已经通过了多少个字符,然后确保断开该行(并在下一轮重置idx)。

int idx = 0;
for (int sub = 0; text[sub] != '\0'; sub++, idx++)
{
    space_check = false;

    if (idx >= wrap_size && sub != 0)
        space_check = true;

    if (space_check == true && text[sub] == ' ')
    {
        cout << endl;
        idx = 0;
    }
    else
    {
        cout << text[sub];
    }
}