【问题标题】: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。
【问题讨论】:
标签:
c
if-statement
simplify
arc4random
【解决方案1】:
哎呀!将字符串放在一个数组中,而不是有 8 个不同的变量。然后使用 for 循环。
【解决方案2】:
- 计算列表中的有效字符串。
- 形成随机数
(rand() % Count)。
- 找到匹配的字符串。
示例代码
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】:
将字符串放入数组中
使用随机函数在数组中选择一个随机索引
使用类似于:
的代码
诠释我;
for (i = index; i != index; i = (i+1) % numitems)
{
/* 检查我们有一个字符串并且它不为空 */
if (strings[i] && *strings[i])
返回字符串[i];
}
返回空值;
假设 index 是您在 0 和 numitems -1 之间的随机数。