我的问题类似于this one,但我不想为此使用库。
想象一下,我们有一个我们想要输出的名字数组。
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
的每个循环,如果它是最后一个元素,但这似乎不是一个干净的解决方案。
在不使用库的情况下在元素之间插入逗号的最佳方法是什么?
答案 0 :(得分: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;
}
或者,如果您不使用C ++ 11:
for (unsigned i = 0; i < sizeof(names) / sizeof(names[0]); ++i) {
if (i > 0)
cout << ", ";
cout << names[i];
}
但是这个:
在不使用库的情况下在元素之间插入逗号的最佳方法是什么?
是错误的态度。只有在使用库时,C ++才能正常工作。没有库,C ++是一种糟糕的语言。或者,用Stroustrup的话说:
如果没有一个好的库,大多数有趣的任务在C ++中很难做到;但是如果有一个好的图书馆,几乎任何任务都可以轻松完成。
答案 1 :(得分:4)
答案 2 :(得分:2)
为什么不简单:
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];
这就是我通常做的事情。
答案 3 :(得分:1)
这不是一个干净的解决方案,但它是唯一的解决方案。
for(int i = 0; i < sizeof(names); i++)
{
cout << names[i] << (i==sizeof(names)-1)?"",", ";
}