gpt4 book ai didi

c - 在 C 中替代此 switch 语句

转载 作者:行者123 更新时间:2023-12-05 08:30:11 25 4
gpt4 key购买 nike

我在下面发布的代码是我整个程序的一部分。其余代码与此问题无关。除了使用这个长的 switch 语句之外,还有其他解决方案吗?主要目标是缩短代码。 if 语句仅用于将小写字母大写。

int POINTS[] = { 1, 3, 3, 2, 1, 4, 2, 4, 1, 8, 5, 1, 3, 1, 1, 3, 10, 1, 1, 1, 1, 4, 4, 8, 4, 10 };

int compute_score(string word)
{
// TODO: Compute and return a score for string
int word_length = strlen(word);
int i, sum = 0;

for (i = 0; i < word_length; i++)
{
//This if statement is used to captalise lower-case letters.
if (islower(word[i]))
{
word[i] = toupper(word[i]);
}

//This switch statement is the key in this program. It will check
//each letter of word and then modify variable sum according to it.
switch (word[i])
{
case 'A':
sum = sum + POINTS[0];
break;
case 'B':
sum = sum + POINTS[1];
break;
case 'C':
sum = sum + POINTS[2];
break;
case 'D':
sum = sum + POINTS[3];
break;
case 'E':
sum = sum + POINTS[4];
break;
case 'F':
sum = sum + POINTS[5];
break;
case 'G':
sum = sum + POINTS[6];
break;
case 'H':
sum = sum + POINTS[7];
break;
case 'I':
sum = sum + POINTS[8];
break;
case 'J':
sum = sum + POINTS[9];
break;
case 'K':
sum = sum + POINTS[10];
break;
case 'L':
sum = sum + POINTS[11];
break;
case 'M':
sum = sum + POINTS[12];
break;
case 'N':
sum = sum + POINTS[13];
break;
case 'O':
sum = sum + POINTS[14];
break;
case 'P':
sum = sum + POINTS[15];
break;
case 'Q':
sum = sum + POINTS[16];
break;
case 'R':
sum = sum + POINTS[17];
break;
case 'S':
sum = sum + POINTS[18];
break;
case 'T':
sum = sum + POINTS[19];
break;
case 'U':
sum = sum + POINTS[20];
break;
case 'V':
sum = sum + POINTS[21];
break;
case 'W':
sum = sum + POINTS[22];
break;
case 'X':
sum = sum + POINTS[23];
break;
case 'Y':
sum = sum + POINTS[24];
break;
case 'Z':
sum = sum + POINTS[25];
break;
}
}
return sum;
}

最佳答案

我猜你想要这样的东西,只是懒得在你的 switch 语句中正确设置所有索引:

if ('A' <= word[i] && word[i] <= 'Z') {
sum += POINTS[word[i] - 'A'];
}

诀窍在于 char 也只是数字,因此您可以比较它们以查看字符是否为大写拉丁字母,然后减去 'A'获取 POINTS 数组中从 0 开始的位置。

但是,请注意,这仅在目标系统上的字符集包含按字母顺序连续地从 AZ 的字母时才有效。目前为止,大多数系统都使用 ASCII(的超集),上面的代码可以正常工作。但是,如果使用更奇特的字符集,例如 EBCDIC,您将需要不同的方法,例如查找表、哈希表,或者...一个大的 switch 语句。

关于c - 在 C 中替代此 switch 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65613672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com