繁体   English   中英

此函数不返回正确的布尔值

[英]This funtion doesn't return the correct bool

我制作了这个 function 来检查我的字符串是否是回文。 当它是时,它会打印它,但是当字符串不是回文时,它不会打印任何东西

bool is_palindrome(char cad[]){
  bool is = false;
  int size, i;

  size = 0;
  i = 0;
  while(cad[i] != '\0'){
    i++;
    size++;
  }

  i = 0;
  while(cad[i] != '\0'){
    if(cad[i] == cad[size - 1]){
      i++;
      size--;
      is = true;
    }else{
      is = false;
    }
  }


  if(is == true){
    printf("IS PALINDROME\n");
  }else if(is == false){
    printf("IT ISN'T PALINDROME");
  }

  return is;
}

我的主要是:

int main(){

  bool is 
  
  is = is_palindrome("ABCDCBA"); //It funtions well
  is = is_palindrome("Hello"); //It doesn't funtion

  return 0;
}

你有一个无限循环。 在第二个 while() 中,如果单词不是回文,它进入else条件并且你不增加i 所以循环永远不会退出!

一旦你发现一个不匹配的字母,你就可以简单break从循环中跳出来,因为你知道这个词不是回文。 像这样:

bool is_palindrome(char cad[]){
  bool is = false;
  int size, i;

  size = 0;
  i = 0;
  while(cad[i] != '\0'){
    i++;
    size++;
  }

  i = 0;
  while(cad[i] != '\0'){
    if(cad[i] == cad[size - 1]){
      i++;
      size--;
      is = true;
    }else{
      is = false;
      break;
    }
  }    

  if(is == true){
    printf("IS PALINDROME\n");
  }else if(is == false){
    printf("IT ISN'T PALINDROME");
  }

  return is;
}

您甚至可以进一步简化它,例如:

  is = true;
  while(cad[i] != '\0') {
    if(cad[i] != cad[size - 1]){
      is = false;
      break;
    }
    i++;
    size--;
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM