cout<<"Set B : {";
for(i=0;i<b;i++)
{
cout<<setB[i];
cout<<",";
}
cout<<" }"<<endl;
上面的代码打印不正确。它应该打印Set B:{1,2,3},但它打印一个额外的逗号==&gt;设置B:{1,2,3,}
任何帮助将不胜感激。提前谢谢!
答案 0 :(得分:15)
使用
cout << "Set B : {";
for (i = 0; i < b; ++i) {
if (i > 0) cout << ",";
cout << setB[i];
}
cout << " }" << endl;
我改变了你的算法:
在它出现之前:&#34;输入数字,然后加上逗号&#34;
现在意味着:&#34;如果我后面有一个号码,请输入一个逗号,然后输入数字&#34;
之前,您在打印数字时总是打印一个逗号,因此您有一个额外的逗号。
答案 1 :(得分:4)
对于for循环的每次迭代,程序将在for循环内执行-everything-。因此,您的循环将贯穿并打印您的集合中的每个数字,然后打印逗号。
问题在于即使在你最后一次循环运行时,它也会打印一个逗号,因为它是循环的一部分。
cout << "Set B : {";
for(i = 0; i < b; i++){
cout << setB[i];
if (i < (b-1))
cout << ",";
}
cout << " }" << endl;
此代码将运行完全相同,除了它在循环中运行的倒数第二次,它不会打印逗号。没必要太花哨。 :)
答案 2 :(得分:2)
我个人更喜欢这个解决方案。首先打印出第一个元素,然后打印, [second element]
。
cout <<"Set B : {" << setB[0];
for(i = 1; i < b; i++)
{
cout << ",";
cout<<setB[i];
}
cout << " }" << endl;
警告!:如果数组为空,则无效。
答案 3 :(得分:1)
循环代码打印一对数字和逗号。尝试使用这个:
cout<<"Set B : {";
for(i=0;i<b;i++)
{
cout<<setB[i];
if(i < b-1) cout<<",";
}
cout<<"}"<<endl;
答案 4 :(得分:1)
你正在循环执行cout&lt;&lt; &#34;&#34; 3次。以下将给出您想要的内容:
#include <iostream>
using namespace std;
int main(){
int setB[] = {1,2,3};
cout<<"Set B : {";
for(int i=0;i<3;i++)
{
cout<<setB[i];
if ( i < 2 )
cout<<",";
}
cout<<" }"<<endl;
return 0;
}
答案 5 :(得分:1)
我经常处理这些循环的方式,你希望在项目列表之间放置空格或逗号之类的内容,如下所示:
int main()
{
// initially the separator is empty
auto sep = "";
for(int i = 0; i < 5; ++i)
{
std::cout << sep << i;
sep = ", "; // make the separator a comma after first item
}
}
<强>输出:强>
0, 1, 2, 3, 4
如果你想提高速度效率,可以在进入循环之前使用if()
输出第一项,输出其余项目,如下所示:
int main()
{
int n;
std::cin >> n;
int i = 0;
if(i < n) // check for no output
std::cout << i;
for(++i; i < n; ++i) // rest of the output (if any)
std::cout << ", " << i; // separate these
}
答案 6 :(得分:1)
另一种方式,没有额外的分支:
std::cout << "Set B : {";
const char* sep = "";
for (const auto& e : setB) {
std::cout << sep << setB[i];
sep = ", ";
}
std::cout <<" }" << std::endl;
答案 7 :(得分:0)
如果您可以使用STL,请尝试以下操作:
#include <iterator>
#include <iostream>
int main() {
int setB[]{1,2,3};
std::cout << "Set B : { ";
for(auto i = std::begin(setB), e = std::end(setB); i != e;) {
std::cout << *i;
for(++i; i !=e; ++i) { std::cout << ", " << *i; }
}
std::cout << " }" << std::endl;
return 0;
}
答案 8 :(得分:0)
我真的很想推广使用range library来编写声明性代码而不是命令式样式的嵌套for-if语句。
#include <range/v3/all.hpp>
#include <vector>
#include <iostream>
#include <string>
int main()
{
using namespace ranges;
std::vector<int> const vv = { 1,2,3 };
auto joined = vv | view::transform([](int x) {return std::to_string(x);})
| view::join(',');
std::cout << to_<std::string>(joined) << std::endl;
return 0;
}