...
int x;
int z1 = '-';
int z2 = '-';
int z3 = '-';
int z4 = 'a';
if ((z1 == 'a' || z1 == 'b')) x++;
else if ((z1 == '-' && z2 == 'a' || z2 == 'b')) x++;
else if ((z1 == '-' && z2 == '-' && z3 == 'a' || z3 == 'b')) x++;
else if ((z1 == '-' && z2 == '-' && z3 == '-' && z4 == 'a' || z4 == 'b')) x++;
else x = 0;
printf("x=%d\n",x);
...
我的代码比这长得多,我想知道是否有更短的方法来获得相同的结果,或者程序执行它的速度更快! 在此先感谢您的帮助和关注!
最佳答案
为了使代码更短(并且更具可读性、可扩展性和全面性更好),将 z
变量放在一个数组中,然后对其进行循环。对于您想要的任意数量的 z
变量,下面的解决方案将保持相同的行数。只需调整数组的大小即可。
int z[4];
for (int i = 0; i < 4; i++)
{
if (z[i] != '-')
{
x += (z[i] == 'a' || z[i] == 'b'); // note the implicit conversion from boolean to int
break;
}
}
请注意,您仍然需要考虑到最后一个索引是 -
并且 x
永远不会递增或设置为 0
,但这可以做一个简单的修改。我建议将以上内容放入它自己的评估函数中,这样你就可以简单地捕获所有 return
。
注意:您可能应该为您的变量使用 char
数据类型,因为您专门在其中存储字符。
就速度而言,此解决方案可能与您当前的解决方案相当(如果不是更好的话)。它的分支次数与您的 if-else
语句一样多,但在运行时可能会有更好的分支预测(感谢 for-loop
)并且评估更少表达式。
关于c++ - 有没有比使用 "if"更快/更短的方式在 C++ 中进行这些测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23718537/