转换多个 if else 以在 C/C++ 中切换大小写

Adi*_*Sur 1 c++ if-statement switch-statement c++11

在 C/C++ 中,我有一个场景,如果应该根据空大小执行。如果变量 a 的大小为 0,则应打印字符串 'add name',否则应打印 'leave it' 字符串。但是我也有用于编码的 switch case,对于每种情况,如果条件会有所不同。

 switch(encoding)
    case utf:
        if(a->size-5 == 0)
        {
            cout<<"add name";
        }
        else
        {
           cout<<"leave it";
        }
    case ansi:
        if(a->size-4 == 0)
        {
            cout<<"add name";
        }
        else
        {
           cout<<"leave it";
        }
    case ansi8:
        if(a->size-8 == 0)
        {
            cout<<"add name";
        }
        else
        {
           cout<<"leave it";
        } 
Run Code Online (Sandbox Code Playgroud)

我想以最少的方式做到这一点。那么最好的方法是什么。

for*_*818 6

我不完全理解您期望的解决方案,但是 - 与评论中建议的相同 - 从您的代码中删除重复时,我们留下:

    if(a->size-offset == 0)
    {
        cout<<"add name";
    }
    else
    {
       cout<<"leave it";
    }
Run Code Online (Sandbox Code Playgroud)

在哪里offset可以通过确定:

int offset = 0;
switch(encoding) {
   case utf: offset = 5; break;
   case ansi: offset = 4; break;
   case asni8: offset = 8; break;
}
Run Code Online (Sandbox Code Playgroud)

可能更简洁的解决方案是使用多态类型,以便将编码差异封装在虚拟方法中,您可以编写:

    if(a->check_size())
    {
        cout<<"add name";
    }
    else
    {
       cout<<"leave it";
    }
Run Code Online (Sandbox Code Playgroud)