检查是否可以从C中的字符数组构建单词

时间:2018-12-06 17:07:32

标签: c string

你好,我正在创建子手游戏,并且我具有检查是否猜到单词的功能

例如,输入参数是秘密的“计算机”,而letter_guessed是已经猜到的字母,例如“ fgtcsomputdser”

如果可以使用这些字母构建计算机,则会返回1

我的功能无法正常工作,因为如果我尝试秘密运行它=计算机并猜到= comp,我会猜到1个字

int is_word_guessed(const char secret[], const char letters_guessed[]) {        
    int guessed;
    for(int i = 0; i < strlen(secret); i++) {
        guessed = 0;
        for(int j = 0; j < strlen(letters_guessed); j++) {
            if(secret[i] == letters_guessed[j]) {
                guessed = 1;
                break;
            }
        }
    }
    if(guessed) return 1;
    else return 0;
}

2 个答案:

答案 0 :(得分:1)

您可以计算出秘密中猜出的字母的数量,如果该数字与秘密的长度相同,则表示单词已被猜中

int is_word_guessed(const char secret[], const char letters_guessed[]) {        
  int guessed = 0;
  for(int i = 0; i < strlen(secret); i++) {
    for(int j = 0; j < strlen(letters_guessed); j++) {
      if(secret[i] == letters_guessed[j]) {
        guessed ++;
        break;
      }
    }
  }
  if(guessed == strlen(secret)) return 1;
  else return 0;
}

答案 1 :(得分:1)

您正在检查secret中的每个字母是否也位于letters_guessed[]中,但是在继续检查下一个字母时,不会保留一个字母的结果。因此,最终结果只会告诉您最后一个检查的字母,而不是整个单词。

有多种解决方法,但是我建议扭转测试的含义:在secret中查找在letters_guessed中不是 的任何字母。找到这样的字母后,请立即返回0;如果循环终止而未找到该字母,则返回1。