不要在最后一个号码后打印空格

时间:2011-02-15 14:51:11

标签: c++

LANGUAGE:C ++ 您好,在以下函数(代码块)中,我已经写了一行来打印字符之间的空格,但我不希望在最后一个字符之后打印空格。我该如何解决这个问题?

bool perfecto(int n)
{
    int suma, i;
    suma = 0;
    for (i = 1; i < n; i++)
    {
        if (n % i == 0) 
        {
            suma += i;
            cout << i << " ";
        }
    }
    if (suma == n)
        return true;
    else
        return false;
}

祝你好运。 ÁngelManuel。

5 个答案:

答案 0 :(得分:14)

最简单的方法是解决问题:如果你只在打印数字之前打印空格(而不是之后),那么它就变成了第一次不打印的方式,这更容易。

我会让你弄明白:)

答案 1 :(得分:4)

bool perfecto(int n)
{
    int suma, i;
    suma = 0;
    bool first = true;
    for (i = 1; i < n; i++)
    {
        if (n % i == 0) 
        {
            suma += i;

            if ( !first )
            {
                cout << " ";
            }

            cout << i;

            first = false;
        }
    }
    if (suma == n)
        return true;
    else
        return false;
}

答案 2 :(得分:0)

您可以检查我是否等于n - 1而不是在那种情况下打印它,或类似

std::cout << "1";
for (int i = 2; i < n; ++i)
{
    std::cout << " " << i;
}

在第二种情况下,您必须注意n为1或更小的情况

答案 3 :(得分:0)

有多种选择。在这种情况下,最简单的方法是在除第一个元素之外的元素之前打印空格并使用标记来跟踪第一个元素:

bool perfecto(int n)
{
    int suma, i;
    suma = 0;
    bool first = true;
    for (i = 1; i < n; i++)
    {
        if (n % i == 0) 
        {
            suma += i;
            if(!first)
            {
                std::cout << " ";
            }
            else first = false;
            cout << i;
        }
    }
    if (suma == n)
        return true;
    else
        return false;
}

编辑:其他流行的替代方案是打印第一个项目并且在循环外没有分隔符,然后在循环内部,您始终可以预先打印项目而不进行if-check。这种方法不适用于您的循环,因为您并不总是知道第一个项目何时打印。您还可以创建包装ostream类似于跟踪其内部打印状态并知道何时放置空格的类。

答案 4 :(得分:-2)

替换此行:cout << i << " "; 用:

cout << i;

if (i == n-1)
  cout << endl;
else
  cout << " ";