在C/C++中,我有一个场景,其中if应该在空大小的基础上执行。如果变量a的大小为0,则应打印'add name‘字符串,否则应打印'leave it’字符串。但我也有切换编码的情况,对于每种情况,都会有不同的if条件。
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";
} 我想以最小的方式来做。那么,最好的方法是什么呢?
发布于 2021-08-05 18:07:54
我不完全理解您所期望的解决方案,但是--正如评论中所建议的--当从您的代码中删除重复项时,我们只剩下:
if(a->size-offset == 0)
{
cout<<"add name";
}
else
{
cout<<"leave it";
}其中offset可以通过以下方式确定:
int offset = 0;
switch(encoding) {
case utf: offset = 5; break;
case ansi: offset = 4; break;
case asni8: offset = 8; break;
}也许更干净的解决方案是使用多态类型,这样编码中的差异就封装在虚方法中,您可以这样写:
if(a->check_size())
{
cout<<"add name";
}
else
{
cout<<"leave it";
}发布于 2021-08-05 19:39:46
我认为三元运算符是最好的方法。
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;
}发布于 2021-08-05 18:11:06
我会这样写你的代码:
//...
//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";
//...https://stackoverflow.com/questions/68671487
复制相似问题