元素之间的输出逗号

Output Commas between Elements

本文关键字:输出 之间 元素      更新时间:2023-10-16

我的问题与此类似,但我不想为此使用库。

假设我们有一个想要输出的名称数组。

string names[] = { "Peter", "Max", "Jack", "Daniel", "Luke" };
for(int i = 0; i < sizeof(names); i++)
{
    cout << names[i];
}

输出:PeterMaxJackDanielLuke

这不完全是我们所说的用户友好,所以让我们在名称之间输出逗号。

for(int i = 0; i < sizeof(names); i++)
{
    cout << names[i] << ", ";
}

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

问题是结尾逗号。有了if我可以检查每个循环for是否是最后一个元素,但这似乎不是一个干净的解决方案。

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

首先,你的代码中有一个错误,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;
}

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

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

但是这个:

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

是错误的态度。C++仅在使用库时才有效。没有库,C++是一种糟糕的语言。或者,用斯特劳斯特鲁普的话来说:

没有一个好的库,大多数有趣的任务很难在C++中完成;但是如果有一个好的库,几乎任何任务都可以变得容易。

使用 boost::join

std::cout << boost::join(names, ", ") << "n";

因为重写函数没有意义...虽然它肯定很简单。

为什么不简单地:

string names[] = { "Peter", "Max", "Jack", "Daniel", "Luke" };
int i;
for (i = 0; i < sizeof(names) / sizeof(names[0]) - 1; i++)
{
    cout << names[i] << ", "; 
}   
cout << names[i];

这就是我通常所做的。

这不是一个干净的解决方案,但它是唯一的解决方案。

for(int i = 0; i < sizeof(names); i++)
{
    cout << names[i] << (i==sizeof(names)-1)?"",", ";
}