元素之间的输出逗号

dan*_*jar 1 c++ performance coding-style

我的问题类似于这个问题,但我不想为此使用库.

想象一下,我们有一个我们想要输出的名称数组.

string names[] = { "Peter", "Max", "Jack", "Daniel", "Luke" };

for(int i = 0; i < sizeof(names); i++)
{
    cout << names[i];
}
Run Code Online (Sandbox Code Playgroud)

输出: PeterMaxJackDanielLuke

这不是我们所谓的用户友好,所以让我们在名称之间输出逗号.

for(int i = 0; i < sizeof(names); i++)
{
    cout << names[i] << ", ";
}
Run Code Online (Sandbox Code Playgroud)

输出: Peter, Max, Jack, Daniel, Luke,

问题是结尾逗号.随着if我可以检查每一个循环for,如果它是最后一个元素,但这并不似乎是一个干净的解决方案.

在不使用库的情况下在元素之间插入逗号的最佳方法是什么?

Kon*_*lph 5

首先,代码中存在错误,sizeof(names)会产生错误的值.

为了将逗号放在正确的位置,传统的方法如下:

string names[] = { "Peter", "Max", "Jack", "Daniel", "Luke" };
bool first = true;

for(auto const& name : names) {
    if (first)
        first = false;
    else
        cout << ", ";
    cout << name;
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您不使用C++ 11:

for (unsigned i = 0; i < sizeof(names) / sizeof(names[0]); ++i) {
    if (i > 0)
        cout << ", ";
    cout << names[i];
}
Run Code Online (Sandbox Code Playgroud)

但是这个:

在不使用库的情况下在元素之间插入逗号的最佳方法是什么?

是错误的态度.只有在使用库时,C++才能正常工作.没有库,C++是一种糟糕的语言.或者,用Stroustrup的话说:

如果没有一个好的库,大多数有趣的任务在C++中很难做到; 但是如果有一个好的图书馆,几乎任何任务都可以轻松完成.


Mat*_* M. 5

使用boost::join

std::cout << boost::join(names, ", ") << "\n";
Run Code Online (Sandbox Code Playgroud)

因为重写这个函数是没有意义的……尽管它确实足够简单。