对于我正在教授的课程,我需要编写一段代码来迭代所有可能的char值。我想以一种可在不同 C++ 实现之间移植的方式来完成此操作。这意味着
char是signed或unsigned,char是八位,sizeof(int) > 1,int32_t等类型存在,我想出的最佳解决方案是以下不寻常的do ... while循环:
char ch = numeric_limits<char>::min();
process(ch);
do {
ch++;
process(ch);
} while (ch != numeric_limits<char>::max());
Run Code Online (Sandbox Code Playgroud)
这种方法有效,但对我来说感觉相当笨拙。从直觉上看,可能需要这样的方法是有道理的,因为增量的数量比可能的字符数多一,但也许有一种根本不同的方法可用,更类似于传统的循环for。
有没有一种比这更方便的便携式方法来实现这一目标?
但也许有一种根本不同的方法可用,它更类似于传统的 for 循环。
好吧,你可以使用一个实际的for循环:
#include <limits>
#include <iostream>
void process(char ch)
{
std::cout << static_cast<long>(ch) << ' ';
}
int main()
{
for ( char ch = std::numeric_limits<char>::min(); ; ++ch )
{
process(ch);
if ( ch == std::numeric_limits<char>::max() )
break;
}
std::cout << '\n';
}
Run Code Online (Sandbox Code Playgroud)