0

我需要检测我需要显示的与用户分数相对应的单词。

我有下一个开关:

switch (score) {
        case 0:
            outString = @"String1";
            break;
        case 1:
            outString = @"String2";
            break;
        case 2:
            outString = @"String3";
            break;
        case 3:
            outString = @"String3";
            break;
        case 4:
            outString = @"String3";
            break;
        case 5:
            outString = @"String1";
            break;
        case 6:
            outString = @"String1";
            break;
        case 7:
            outString = @"String1";
            break;
        case 8:
            outString = @"String1";
            break;
        case 9:
            outString = @"String1";
            break;           

        default:
            break;
    }

但是,当得分为 29 或 109 时,我如何使用相同的开关。所以我需要在第一种情况下修剪 20 以获得 9,在第二种情况下我需要修剪 100 以获得 9。

我以前用过这个算法,但我忘记了如何:(

所以目标是下一个 - 我每次只需要从 0 到 9 的数字,而没有千分之十分之一的数字。

4

2 回答 2

4

如果您的单词总是取决于数字的最后一位,您可以简单地在开关条件下使用它(使用模运算符):

switch (score % 10)
   ...

如果只有 29 和 129 是特殊情况,那么您可以对同一情况使用多个标签:

case 9:
case 29:
case 109:
        outString = @"String1";
        break;
于 2013-08-12T11:45:43.577 回答
2

比使用巨型switch语句更好的是使用查找表:

std::string score_string(unsigned int score)
{
    static const std::string strings = {"String1","String2","String3",...};
    static const int strings_count = 10; //10 strings in the lookup table, for example.

    return strings[score % strings_count];
}
于 2013-08-12T11:50:52.003 回答