如何避免打印 cout 语句的终端 space
How to avoid printing terminal space of cout statement
我正在开发一个以相反顺序打印命令行参数的函数。代码有点不雅,我知道,但我只需要一些有用的东西:
#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
if (argc==1){
cout <<"\n";
}
for (int str=argc; str-1; str--){
cout <<argv[str-1]<<" ";
}
if(argc>1){
cout<<"\n";
}
return 0;
}
因此,我的问题是:按照当前的编程,这会在打印每个命令行参数后打印出 space。但是,在打印最终命令行参数后,我不需要 space 。我将如何实现这一目标?我是否必须在 for 循环之后放入另一个 if 语句?
如果是基础问题请见谅;我搜索并找不到任何类似的东西。我现在只是在学习 C++ 的基础知识,我正在使用的当前教科书中没有任何帮助,因此我将不胜感激。预先感谢您的帮助!
Would I have to put in another if statement after the for loop?
是的。那将是最简单明了的方法。也许是这样的:
for (int str=argc; str>1; str--){
cout << argv[str-1];
if (str != 2)
cout << " ";
}
不,您不一定需要 if 语句:
cout << argv[argc - 1];
for (int str = argc - 1; str > 1; str--)
{
cout << " " << argv[str - 1];
}
虽然这是我的第一选择。
如果:
for (int str = argc; str > 1; str--)
{
if(str > 2) cout << argv[str - 1] << " ";
else cout << argv[str - 1];
}
再有一个 if 有什么问题?
...
for (int str=argc; str-1; str--){
cout << argv[str-1];
if (str>2) cout << " ";
}
...
您跳过 if statements
(除非您打算在其中做一些非常具体的事情)。
当您不提供任何命令行参数时,for
循环(连同三元运算符)本身会处理这种情况。如果没有命令行参数,for 循环 str > 1
中的第二个参数将为 false(因为 argc 将为 1)。所以你也可以得到同样的东西:
int str;
for (str=argc; str > 1; str--)
(str > 2)?cout<< argv[str-1]<<" " :cout<<argv[str-1]<<"\n";
如果你仍然想用 if 语句来做,你实际上可以这样做
int str;
if(argc==1) //if argc equals 1
cout <<"\n";
else //this would also include the argc > 1 cases.
{
for (str=argc; str > 1; str--)
cout <<argv[str-1]<<" "; //print n-1 characters within the loop
cout<<argv[str-1]<<"\n"; //and last one outside the for loop
}
我想我会以稍微不同的方式编写代码。我想我会使用更接近于此的东西:
#include <iostream>
#include <vector>
#include "infix_iterator.h"
int main(int argc, char **argv) {
std::vector<char *> args {argv+1, argv+argc};
if (args.empty())
return 1;
std::cout << "\n";
std::copy(args.rbegin(), args.rend(),
infix_ostream_iterator<char *>(std::cout, " "));
std::cout << "\n";
}
这使用了我在 a question on CodeReview 中发布的 infix_ostream_iterator
,这使得很多类似的任务变得更加容易。
我正在开发一个以相反顺序打印命令行参数的函数。代码有点不雅,我知道,但我只需要一些有用的东西:
#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
if (argc==1){
cout <<"\n";
}
for (int str=argc; str-1; str--){
cout <<argv[str-1]<<" ";
}
if(argc>1){
cout<<"\n";
}
return 0;
}
因此,我的问题是:按照当前的编程,这会在打印每个命令行参数后打印出 space。但是,在打印最终命令行参数后,我不需要 space 。我将如何实现这一目标?我是否必须在 for 循环之后放入另一个 if 语句?
如果是基础问题请见谅;我搜索并找不到任何类似的东西。我现在只是在学习 C++ 的基础知识,我正在使用的当前教科书中没有任何帮助,因此我将不胜感激。预先感谢您的帮助!
Would I have to put in another if statement after the for loop?
是的。那将是最简单明了的方法。也许是这样的:
for (int str=argc; str>1; str--){
cout << argv[str-1];
if (str != 2)
cout << " ";
}
不,您不一定需要 if 语句:
cout << argv[argc - 1];
for (int str = argc - 1; str > 1; str--)
{
cout << " " << argv[str - 1];
}
虽然这是我的第一选择。
如果:
for (int str = argc; str > 1; str--)
{
if(str > 2) cout << argv[str - 1] << " ";
else cout << argv[str - 1];
}
再有一个 if 有什么问题?
...
for (int str=argc; str-1; str--){
cout << argv[str-1];
if (str>2) cout << " ";
}
...
您跳过 if statements
(除非您打算在其中做一些非常具体的事情)。
当您不提供任何命令行参数时,for
循环(连同三元运算符)本身会处理这种情况。如果没有命令行参数,for 循环 str > 1
中的第二个参数将为 false(因为 argc 将为 1)。所以你也可以得到同样的东西:
int str;
for (str=argc; str > 1; str--)
(str > 2)?cout<< argv[str-1]<<" " :cout<<argv[str-1]<<"\n";
如果你仍然想用 if 语句来做,你实际上可以这样做
int str;
if(argc==1) //if argc equals 1
cout <<"\n";
else //this would also include the argc > 1 cases.
{
for (str=argc; str > 1; str--)
cout <<argv[str-1]<<" "; //print n-1 characters within the loop
cout<<argv[str-1]<<"\n"; //and last one outside the for loop
}
我想我会以稍微不同的方式编写代码。我想我会使用更接近于此的东西:
#include <iostream>
#include <vector>
#include "infix_iterator.h"
int main(int argc, char **argv) {
std::vector<char *> args {argv+1, argv+argc};
if (args.empty())
return 1;
std::cout << "\n";
std::copy(args.rbegin(), args.rend(),
infix_ostream_iterator<char *>(std::cout, " "));
std::cout << "\n";
}
这使用了我在 a question on CodeReview 中发布的 infix_ostream_iterator
,这使得很多类似的任务变得更加容易。