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

时间:2015-01-17 00:17:39

标签: c++ string stdout

好的,所以通过阅读this question,我已经明白了\b\n的确切行为。我仍然不知道如何做到以下几点:

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

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");

然而,这会在每一行的末尾留下一个尾随空格。如何将输出设为"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(...)"

3 个答案:

答案 0 :(得分:3)

我使用infix_ostream_iterator

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

#include "infix_iterator"

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

答案 1 :(得分:1)

仅在不写最后一个元素时才添加空格。

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");

答案 2 :(得分:1)

在打印号码后检查是否打印最后一个号码:

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]);
}