使用数组在C中创建switch语句?

时间:2012-09-14 15:31:09

标签: c arrays switch-statement

我正在尝试创建一个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;
}

5 个答案:

答案 0 :(得分:6)

拥有查找数组可能会更快:

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。

答案 1 :(得分:3)

尝试使用此

 switch(word[i]){ 
在switch语句中

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

答案 2 :(得分:3)

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

switch(word[i])

答案 3 :(得分:0)

在C中,您不能在switch中使用数组(以及case的表达式)。此外,传递给switch()的类型和每个case中指定的类型必须匹配。所以你能做的最多就是打开一个角色。你几乎把它弄好了,除了你将整个阵列传递给开关。使用index来引用字符。例如:

switch (word[i]) {
 ...
}

答案 4 :(得分:0)

你有word作为size7的数组,你不能打开数组,你必须在数组的每个字符上swicth所以使用: 开关(字[I])