是否有一個快速的方法來做到無i++
格式化字符串以遞增的整數C++
int i = 0;
printf("foo-%d,blah-%d,orange-%d", i++, i++, i++);
我需要用8個或更多的對和代碼看起來可怕做到這一點,重複以下..
是否有一個快速的方法來做到無i++
格式化字符串以遞增的整數C++
int i = 0;
printf("foo-%d,blah-%d,orange-%d", i++, i++, i++);
我需要用8個或更多的對和代碼看起來可怕做到這一點,重複以下..
既然你可以有8對以上,我想建議你使用更可讀且易於擴展的版本:
std::vector<std::string> vec_values = {"foo", "blah", "orange"};
for (size_t index = 0; index < vec_values.size(); ++index)
std::cout << vec_values[index] << "-" << index;
我會做這樣的感謝 – AlasdairC
你可能會認爲它的前綴而言,沒有數量:
int i = 0;
std::vector<std::string> prefixes { "foo", "bar", "baz", "ham" };
bool first = false;
for (const auto& prefix : prefixes) {
if (!first)
std::cout << ',';
std::cout << prefix << '-' << i++;
first = false;
}
如果您不能使用C++ 11的範圍爲主for
,您可以將其全文寫出來:
for (auto prefix = prefixes.begin(); prefix != prefixes.end(); ++prefix) {
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if (!first)
std::cout << ',';
std::cout << *prefix << '-' << i++;
// ~~~~~~~
first = false;
}
或者,使用索引:
for (i = 0; i < prefixes.size(); ++i) {
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if (!first)
std::cout << ',';
std::cout << prefixes[i] << '-' << i;
// ~~~~~~~~~~~ ~
first = false;
}
它不僅看起來可怕,它是不確定的行爲。 –
這裏有很多未定義的行爲。 – Joe
也許你需要創建自己的功能,以保持代碼儘可能乾淨。看看vprintf(http://www.manpagez.com/man/3/vprintf/)和可變參數的函數(http://stackoverflow.com/questions/1657883/variable-number-of-arguments-in- c)根據 – Neozaru