在不包括C++的开关情况下使用范围
Using range in switch case with exclusions C++
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...............................
相关文章:
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 在没有参数列表的情况下使用模板名称"Event"无效,模板问题
- 在 c++ 中在开关情况下使用和不使用"break"时的不同输出
- 如果我想在没有更新编译器的情况下使用新功能,该怎么办?
- 在没有 API 的情况下使用谷歌翻译文本
- 我可以在不使用Qt for Webassembly的情况下使用Emscripten编译Qt吗?
- 如何在开关的情况下使用右值引用
- 循环依赖,在继承类的情况下使用覆盖方法
- 如何在没有返回值的情况下使用(特征)unaryExpr 和 lambda 函数?
- 有没有办法在没有虚拟的情况下使用基类指针调用派生类函数
- 扩展基类并在不更改派生类的情况下使用该功能
- 在集合的情况下使用emplace_hint的用例是什么?
- 如何在不循环的情况下使用getline读取文件
- 如何在没有外部库的情况下使用C++03约束执行基于正则表达式的字符串操作
- 如何在不使用文件扩展名的情况下使用命令行参数打开C++中的文本文件?
- 如何在不包含完整的文件系统头的情况下使用文件系统的类路径C++17?
- 如何在没有同步的情况下使用多个线程(2、4,8、16 个线程)在循环(10,100、1000 个周期)中打印字符串?
- (如何)我可以在不安装完整的提升库的情况下使用 boost::spirit X3 吗?
- 在不包括C++的开关情况下使用范围
- 为什么默认情况下使用 [ ] 运算符访问超出范围的矢量元素时,C++检测?