首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C/ C++中转换多个if else以切换大小写

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

Stack Overflow用户
提问于 2021-08-05 18:01:58
回答 4查看 132关注 0票数 1

在C/C++中,我有一个场景,其中if应该在空大小的基础上执行。如果变量a的大小为0,则应打印'add name‘字符串,否则应打印'leave it’字符串。但我也有切换编码的情况,对于每种情况,都会有不同的if条件。

代码语言:javascript
复制
 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";
        } 

我想以最小的方式来做。那么,最好的方法是什么呢?

EN

回答 4

Stack Overflow用户

发布于 2021-08-05 18:07:54

我不完全理解您所期望的解决方案,但是--正如评论中所建议的--当从您的代码中删除重复项时,我们只剩下:

代码语言:javascript
复制
    if(a->size-offset == 0)
    {
        cout<<"add name";
    }
    else
    {
       cout<<"leave it";
    }

其中offset可以通过以下方式确定:

代码语言:javascript
复制
int offset = 0;
switch(encoding) {
   case utf: offset = 5; break;
   case ansi: offset = 4; break;
   case asni8: offset = 8; break;
}

也许更干净的解决方案是使用多态类型,这样编码中的差异就封装在虚方法中,您可以这样写:

代码语言:javascript
复制
    if(a->check_size())
    {
        cout<<"add name";
    }
    else
    {
       cout<<"leave it";
    }
票数 6
EN

Stack Overflow用户

发布于 2021-08-05 19:39:46

我认为三元运算符是最好的方法。

代码语言:javascript
复制
 switch(encoding) {
    case utf:
        (a->size - 5 == 0) ? std::cout << "add name" : std::cout << "leave it";
        break;
    case ansi:
        (a->size - 4 == 0) ? std::cout << "add name" : std::cout << "leave it";
        break;
    case ansi8:
        (a->size - 8 == 0) ? std::cout << "add name" : std::cout << "leave it";
        break;
 }
票数 1
EN

Stack Overflow用户

发布于 2021-08-05 18:11:06

我会这样写你的代码:

代码语言:javascript
复制
//...
//assuming utf, ansi, and ansi8 are enumerated constants
static const int encoding2size[]={ [utf]=5,[ansi]=4,[ansi8]=8 };
//...
if(a->size - encoding2size[encoding] == 0) cout<<"add name";
else cout<<"leave it";
//...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68671487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档