2

我正在尝试制作一个 switch 语句,它将一个单词放入一个数组中,然后通过 switch 语句抛出每个字母,并根据它是哪个字母为每个字母分配一个点,并为该单词提供一个最终点值,我似乎无法正确处理数组部分。任何帮助,将不胜感激!

int main(){
int letter_points = 0;
char word[7];
int word_length = 7;
int i;
printf("Enter a Word\n");
scanf("%s", word);
for(i = 0; i < word_length; i++){

switch(word){
    //1 point
    case 'A':
    case 'E':
    case 'I':
    case 'L':
    case 'N':
    case 'O':
    case 'R':
    case 'S':
    case 'T':
    case 'U':
        letter_points++;
        break;
    //2 points
    case 'D':
    case 'G':
        letter_points += 2;
        break;
    //3 points
    case 'B':
    case 'C':
    case 'M':
    case 'P':
        letter_points += 3;
        break;
    //4 points
    case 'F':
    case 'H':
    case 'V':
    case 'W':
    case 'Y':
        letter_points += 4;
        break;
    //5 points
    case 'K':
        letter_points += 5;
        break;
    //8 points
    case 'J':
    case 'X':
        letter_points += 8;
        break;
    //10 points
    case 'Q':
    case 'Z':
        letter_points += 10;
        break;
}
}
printf("%d\n", letter_points);
return;
}
4

5 回答 5

7

有一个查找数组可能会更快:

int const letter_score[26] = { 1, 2, 1, 3, ..., 10 };
/*                      key:   A  B  C  D        Z    */

score += letter_score[c - 'A'];   // or "toupper(word[i]) - 'A'"

警告:这需要大写字母连续排列的编码,例如 Unicode 或 ASCII。

于 2012-09-14T15:33:24.380 回答
3

尝试使用这个

 switch(word[i]){ 

在 switch 语句中。就目前而言,即使您正在迭代数组的范围,您也不会测试数组中的每个元素。话虽如此,我会采用 Kerrek SB 在另一个答案中建议的方法。这更整洁,更紧凑。

于 2012-09-14T15:33:19.843 回答
3

变量word是一个数组,但你想switch在每个字符上。因此,您需要:

switch(word[i])
于 2012-09-14T15:33:28.967 回答
0

在 C 中,您不能在switch( 和表达式case) 中使用数组。此外,传递给的switch()类型和每个中指定的类型case必须匹配。所以你能做的最多就是打开一个角色。不过,您几乎做对了,只是您将整个数组传递给 switch。改为使用索引来引用字符。例如:

switch (word[i]) {
 ...
}
于 2012-09-14T15:36:13.963 回答
0

你有一个大小为 7 的数组,你不能打开数组,你必须在数组的每个字符上切换,所以使用: switch(word[i])

于 2013-03-25T11:26:20.303 回答