【发布时间】:2019-04-17 20:20:34
【问题描述】:
我编写了这个程序,将向量中的数字从大到小排序,它工作得很好,但唯一让我烦恼的是试图从最后一个数字中删除逗号。这是我的代码
#include <iostream>
#include <vector>
#include <cstdlib>
#include <algorithm>
using namespace std;
int main() {
vector<int> vi1, vi2, vi3;
srand(987);
for (int i = 0; i < 10; ++i) vi1.push_back(rand() % 10);
sort(vi1.begin(), vi1.end());
for (int i = 0; i < 10; ++i) vi2.push_back(rand() % 10);
sort(vi2.begin(), vi2.end())
while(!vi1.empty() && !vi2.empty()) {
if(vi1.back()>=vi2.back()) {
vi3.push_back(vi1.back());
vi1.pop_back();
}
else {
vi3.push_back(vi2.back());
vi2.pop_back();
}
}
while(!vi1.empty()) {
vi3.push_back(vi1.back());
vi1.pop_back();
}
while(!vi2.empty()) {
vi3.push_back(vi2.back());
vi2.pop_back();
}
for (auto i = vi3.begin(); i != vi3.end(); ++i)
cout << *i << ", ";
cout << "\nBye..." << endl;
return 0;
}
这是输出
9, 9, 9, 8, 8, 8, 6, 6, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 0, 0,
Bye...
正如你所看到的,在最后一个 0 之后有一个逗号,这在语法上没有意义。如何删除那个逗号?
【问题讨论】:
-
逗号要么在除最后一个之外的每个元素之后,要么在除第一个之外的每个元素之前。选择其中一个条件并使用它来打印或不打印逗号。
-
试试这个,在添加逗号时使用变量作为标志来识别:
int bCount = 0;...cout << (bCount++ > 0 ? ", " : "") << *i。 -
或者,就像有人回答的那样:
cout << (i == vi3.begin()? "" : ", ") << *i -
boost::algorithm::join会为你做这件事,如果你不介意把它带进来 -
@rajkod 我对您的代码进行了格式化以提高可读性,但是您应该考虑删除许多完全不相关的代码。将其设为minimal reproducible example,专注于您要解决的问题。