如何从输出中剪切尾随空格

How can I clip trailing spaces from output

好吧,通过阅读 this question,我明白了 \b\n 的确切作用。我仍然不知道如何执行以下操作:

我需要打印由 space 分隔的数组的所有元素,然后对该数组执行一些操作并打印另一组数组中的所有元素,多次,每组分隔通过换行符。像这样:

x[0] x[1] x[2] x[n]
x[0] x[1] x[2] x[n]
x[0] x[1] x[2] x[n]
(etc.)

这是我的代码:

std::printf("%f ",t);
for(int i=0;i<N;i++) {
    std::printf("%f ", x[i]);
}
std::printf("\b\n");

然而,这会在每行末尾留下尾随 space。如何使输出为 "x[0] x[1] x[n]\nx[0] x[1] x[n]\n(...)" 而不是 "x[0] x[1] x[n] \nx[0] x[1] x[n] \n(...)"

只在不写最后一个元素时添加一个space。

std::printf("%f ",t);
for(int i=0;i<N;i++) {
    std::printf("%f", x[i]);
    if ( i != N-1 )
    {
       std::printf(" ");
    }
}
std::printf("\n");

在打印数字后的 space 之前检查您是否打印最后一个数字:

for (int i = 0; i < N; i++) {
    std::printf("%f", x[i]);
    if (i != N-1) {
        std::putc(' ');
    }
}

如果您的基准测试表明比较是瓶颈,而不是 I/O,您可以拆分循环并单独处理最后一种情况:

int i;
for (i = 0; i < N-1; i++) {
    std::printf("%f ", x[i]);
}
if (i < N) {
    std::printf("%f", x[i]);
}

我会使用 infix_ostream_iterator

使用它,代码变得相当简单:

#include "infix_iterator"

std::cout << t << " ";
std::copy(x.begin(), x.end(), infix_ostream_iterator<double>(std::cout, " "));
std::cout << "\n";