元素之间的输出逗号
Output Commas between Elements
我的问题与此类似,但我不想为此使用库。
假设我们有一个想要输出的名称数组。
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)?"",", ";
}
相关文章:
- 为什么在其他输出线之间得到"1"输出?
- 如何在 的开头<x>和结尾<y>之间更改带有文件输出的字符串的值
- 如何使用 ALSA API 在应用程序中在单声道和立体声之间切换声音输出?
- 如何包含整数之间的空格作为输出
- Raku中C++和NativeCall之间的输出不同
- 无法在同一行上获取输出,在 C++ 中两个输出之间有空格
- 尝试查找数组中点之间的最小距离时的随机垃圾输出
- 为什么两个相同的代码给出不同的输出,而它们之间的唯一区别是不同的变量名称和写作样式
- 将线程之间的标准输入/输出重定向
- 提升正则表达式 cpp 用于查找 %% 之间的字符串,输出不包括 % 字符本身
- 这些代码之间的区别在哪里?输出不应该是一样的吗?
- (c++) 返回和函数输出之间的错误
- 在 c++ 中反转数组时,为什么在输入和输出之间得到一个"random"数字?
- GCC和MSVC之间的文件输出不一致
- 可视化GDB在MSVC2012和GCC 7.3.1之间打印不同的C++输出
- C++子级在复制构造函数和输出之间的某个时间点更改父成员
- g++输出和Visual Studio输出之间存在差异.浮点变量
- 这两个程序的输出之间有什么区别以及为什么
- 在输入和输出之间使用不同数量的样本对音频ffmpegc++进行编码
- Qt:调试和发布中moc输出之间的差异