在C中的字谜查找器显示正确和不正确的结果?

4ioopgfo  于 2023-04-29  发布在  其他
关注(0)|答案(1)|浏览(140)

我是C的新手,试图做一个变位查找器,但它不能正确工作,我不知道我错在哪里。它的工作原理是使用两个独立的整数数组counter1counter2计算两个不同字符串中的字母数。然后,它应该比较每个计数器中的值并检查任何不匹配,但由于某种原因,它打印了两种可能的结果,而不是正确的结果。任何帮助赞赏!

#include <stdio.h>
#include <string.h>

int main(){

  //Letter counter for each string
  int counter1[] = {0, 0, 0, 0};
  int counter2[] = {0, 0, 0, 0};

  // Strings to be checked
  char s1[] = "abcd";
  char s2[] = "dcba";

  //Checks letter count in string 1
  
  for (int i = 0; i < strlen(s1); i++) {
    if (s1[i] == ' ') {
      continue; }
    
    else if (s1[i] == 'a') {
      counter1[0] += 1; }

    else if (s1[i] == 'b') {
      counter1[1] += 1; }

    else if (s1[i] == 'c') {
      counter1[2] += 1; }

    else (s1[i] == 'd'); {
     counter1[3] += 1; }
    
  }

  // Checks letter count in string 2

   for (int i = 0; i < strlen(s2); i++) {
    if (s2[i] == ' ') {
      continue; }
    
    else if (s2[i] == 'a') {
      counter2[0] += 1; }

    else if (s2[i] == 'b') {
      counter2[1] += 1; }

    else if (s2[i] == 'c') {
      counter2[2] += 1; }

    else (s2[i] == 'd'); {
      counter2[3] += 1; }
    
  }

  //Checks for mismatches in the letter counters 

  int flag = 0;
  int counterLen = sizeof(counter1)/sizeof(int);

  for (int i = 0; i < counterLen; i++ ) {
   if (counter1[i] != counter2[i]) {
     flag++; }

  }
    
  //Tells user if it's an anagram or not

  if (flag == 0) {
    printf("Anagram!"); }

  else (flag != 0); {
    printf("Not Anagram!"); }

}
j5fpnvbx

j5fpnvbx1#

这个

if (s1[i] == 'c') {
      /* irrelevant 1 */ }

    else (s1[i] == 'd'); {
     /*  irrelevant 2 */ }

s1[i] == 'c'情况下执行“无关1”中的代码。
否则,它执行(s1[i] == 'd');,通过计算布尔表达式并忽略结果,因为它不用于任何东西,特别是不用于if,因为没有。
然后它无条件地执行“无关2”中的代码。在显示的代码中,您至少有三次非模式。
我假设“无条件”的结果是这样或那样的(对不起,这里没有详细说明,因为你似乎实际上在问什么是你错过了什么。..)在你的“它打印两种可能的结果”观察。

相关问题