C ++开关正则表达式案例

时间:2014-05-03 09:11:09

标签: c++ regex switch-statement

我想使用switch case来确定regex的价值,但似乎我不能这样做。我可以regex成功使用if else,如下所示:

if (regex_search(dic_char, lowercase)) {
    cout << dic_char << endl;
} else if (regex_search(dic_char, uppercase)) {
    // do something
} else {
    cout << "Not characters." << endl;
}

但我想这样做:

switch (dic_char) {
    case regex_search(dic_char, lowercase):
        cout << dic_char << endl;
        break;
    case regex_search(dic_char, uppercase):
        // do something
        break;
    default:
        cout << "Not characters." << endl;
        break;
} 

有谁知道我这样做了吗?提前谢谢。

3 个答案:

答案 0 :(得分:1)

这是一种方法(虽然在你的情况下很可能不可行):

将函数regex_search重写为宏(以this为例)。

C和C ++中的switch语句只能采用常量值作为案例。

答案 1 :(得分:0)

您必须在switch语句之外进行计算,并使用结果值打开。

在你的特定情况下,它没有多大意义,因为无论如何只有两个选择。

但更普遍的模式是:

result = do_calculation(p1,p2,..)

switch(result) {

   case 1: ...
....
}

答案 2 :(得分:0)

您提供的if-else版本和switch-case版本在逻辑上是不同的。在前者中,条件是regex_search()方法的返回值,而在以后的形式中,条件是dic_char'. To write switch-case`版本的值,相当于前者,您可以遵循:

   int res = regex_search(param); ///this method must return int/convertible to int value
   switch(res)
   {
      case ... 
   }

您可以创建一个包含方法中有效返回值的enum,并在case语句中使用它。