【问题标题】:C++ - Variable DecrementC++ - 变量递减
【发布时间】:2015-08-25 21:16:59
【问题描述】:

嘿。

我有这段代码,它出于某种神秘原因设置了一个表格。尺寸为 6x60。这意味着 SIZEY 定义为 6,SIZEX 定义为 60。

void set_table(char** table)
{
    int i,j,k=0;

    for(i=0;i<SIZEY;i+=3){
        for(j=0;j<SIZEX;j++){
            switch(k++%5){
                case 0:
                    table[i][j]='|';
                    break;
                case 1:
                    table[i][j]=' ';
                    break;
                case 2:
                    table[i][j]=(char)((((k-2)/50)%10)+48);
                    break;
                case 3:
                    table[i][j]=(char)((((k-3)/5)%10)+48);
                    break;
                case 4:
                    table[i][j]=' ';
                    break;
                default:
                    continue;
            }
        }
    }
}

如您所见,我正在使用 3 个变量来执行此操作。问题是,我可以用 2 个变量,甚至只有 1 个变量来做到这一点吗?

提前致谢。

【问题讨论】:

  • 你想达到什么目的?
  • @KirilKirov 只是想知道这是否可以用更少的资源来完成
  • @KirilKirov ,对不起,我没有正确阅读。
  • 少并不总是更好。当然,你可以用一个变量来做这件事,然后做一堆数学运算来得到你的jk 索引,但是代码几乎是不可读的。如果您希望代码更清晰,请使用 std::vector 之类的类,查看 algorithm 标头并让您的代码更具自我记录性。
  • 您可以使用单个变量来执行此操作。但正如 TartanLlama 已经指出的那样,它很难阅读。而且由于需要乘法和/或除法,代码会慢得多。

标签: c++ function variables multidimensional-array char


【解决方案1】:

这里有一个简化:

    switch(k++%5){
        case 0:
            table[i][j]='|';
            break;
        case 1:
        case 4:
            table[i][j]=' ';
            break;
        case 2:
        case 3:
            table[i][j]= '0';
            break;
        default:
            continue;
  }

在 C++ 中,一种情况可以落入另一种情况,例如上面的情况 1 和 2。

案例 2 和 3 的表达式可以简化。我将以案例 2 为例:
((((k-2)/50)%10)+48)
用 2 代替 k 产量
((((2-2)/50)%10)+48)
简化:
((((0)/50)%10)+48)
零除以任何东西都是零,再次简化:
(((0)%10)+48)
零 mod 任何东西都是零,因为它涉及除法:
((0)+48)
简化:
(48)
替换为等效字符(因为您的数组是 char):
'0'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 2021-11-09
    相关资源
    最近更新 更多