在不包括C++的开关情况下使用范围

Using range in switch case with exclusions C++

本文关键字:情况下 使用范围 开关 不包括 C++      更新时间:2023-10-16

gcc中有一个扩展,允许在switchcase语句中使用"range"。

case 'A' ... 'Z':

允许在字符位于a到Z范围内的任何位置的情况下。
是否可以在这样的范围语句中进行"排除"?例如,假设我希望我的case捕获除"G"answers"L"之外的所有字符A-Z。

我知道一个简单的解决方案是处理a-Z案件主体中的特殊字符,但我更喜欢上面描述的解决方案存在

char c = /* init */;
switch(c)
{
case 'A' ... ('G'-1):
case ('G'+1) ... ('L'-1):
case ('L'+1) ... 'Z':
/* some code */;
}

但我想

一个简单的解决方案。。。处理A-Z大小写正文中的特殊字符

将比上面的代码好得多。

正如评论者所观察到的,这不是标准的C++。

我不会在代码中使用它。

然而,有了GCC的g++,它可以这样工作:

#include <iostream>
using namespace std;
int main()
{
cout << "Case test" << endl;
for (char c = '0'; c<'z'; c++)
{
switch (c)
{
case 'A'...('G'-1): case ('G'+1)...('L'-1): case ('L'+1)...'Z':
cout << c;
break;
default:
cout << ".";
break;
}
}
}
g++ case.cpp -o case -W -Wall -Wextra -pedantic && ./case
case.cpp: In function ‘int main(int, char**)’:
case.cpp:15:9: warning: range expressions in switch statements are non-standard [-Wpedantic]
case 'A'...('G'-1): case ('G'+1)...('L'-1): case ('L'+1)...'Z':
^~~~
case.cpp:15:29: warning: range expressions in switch statements are non-standard [-Wpedantic]
case 'A'...('G'-1): case ('G'+1)...('L'-1): case ('L'+1)...'Z':
^~~~
case.cpp:15:53: warning: range expressions in switch statements are non-standard [-Wpedantic]
case 'A'...('G'-1): case ('G'+1)...('L'-1): case ('L'+1)...'Z':
^~~~
Case test
.................ABCDEF.HIJK.MNOPQRSTUVWXYZ...............................
相关文章: