在排除C的情况下在切换情况下使用范围

时间:2019-01-25 20:59:28

标签: c++ gcc

gcc中有一个扩展,它允许在switch case语句中使用“ range”。

case 'A' ... 'Z':

允许出现字符在A到Z范围内的任何情况的情况。
是否可以在这样的范围语句中进行“排除”?例如,假设我希望我的手机套捕获除“ G”和“ L”之外的所有字符A-Z。

我知道一种简单的解决方案是处理A-Z外壳中的特殊字符,但我希望如果存在上述解决方案

2 个答案:

答案 0 :(得分:1)

评论者认为,这不是标准的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...............................

答案 1 :(得分:1)

char c = /* init */;

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

但是我想

  

一种简单的解决方案...处理A-Z盒体内的特殊字符

会比上面的代码好得多。