如何从输出中剪切尾随空格
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";
好吧,通过阅读 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";