【问题标题】:How to simplify an extensive C if statement?如何简化广泛的 C if 语句?
【发布时间】:2014-01-14 22:24:11
【问题描述】:

我想知道解决这个问题的最佳方法是什么。我设置了一个随机函数,它将 8 个字符串作为输入并输出其中一个随机字符串。我希望这个随机化器忽略所有没有价值的字符串。例如,如果我有字符串 text#,其中 # 是 1-8,假设 text5 和 text7 没有文本,那么我希望随机化函数检查是否有任何使用仅使用 text#,其中 # 是 1-8但不是 5 或 7。

【问题讨论】:

  • 注意8个都是空的情况。
  • 你为这类事情编写软件。你试过什么?

标签: c if-statement simplify arc4random


【解决方案1】:

哎呀!将字符串放在一个数组中,而不是有 8 个不同的变量。然后使用 for 循环。

【讨论】:

    【解决方案2】:
    1. 计算列表中的有效字符串。
    2. 形成随机数(rand() % Count)
    3. 找到匹配的字符串。

    示例代码

    int StringCount = 8;
    char *String[StringCount];
    
    // populate `Sting` somehow
    
    // count valid strings
    int Count = 0;
    for (int i=0; i<StringCount; i++) {
      if (ValidString(String[i])) Count++;
    }
    
    if (Count == 0) Handle_NoGoodStrings();
    int random_number = rand()%Count;
    
    int i;
    for (i=0; i<StringCount; i++) {
      if (ValidString(String[i])) {
        if (Count == random_number) {
          break; 
        }
      }
    }
    
    // String[i] is the string
    

    【讨论】:

      【解决方案3】:
      1. 将字符串放入数组中

      2. 使用随机函数在数组中选择一个随机索引

      3. 使用类似于:

      4. 的代码
      诠释我; for (i = index; i != index; i = (i+1) % numitems) { /* 检查我们有一个字符串并且它不为空 */ if (strings[i] && *strings[i]) 返回字符串[i]; } 返回空值;

      假设 index 是您在 0 和 numitems -1 之间的随机数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-20
        • 2014-06-18
        • 2022-08-10
        • 2019-04-12
        • 1970-01-01
        • 2021-12-07
        • 1970-01-01
        • 2015-09-12
        相关资源
        最近更新 更多