Home > Software engineering >  Problem with IF condition and && OPERATOR
Problem with IF condition and && OPERATOR

Time:02-19

i have encountered a major problem in my code that, when i hits 1 and j is 5, although, the boolean function returns False, the IF statement still manage to operate.

#include <iostream>
using namespace std;
#include <string>

using namespace std;

bool checkSym(string s, int left, int right) {
  if (left >= right)
    return true;
  else {
    if (int(s[left]) != int(s[right]))
      return false;
    else {
      checkSym(s, left   1, right - 1);
    }
  }
}
int main() {
  // TODO
  string s, c, d;
  s = "babadad";
  int max = 0;
  int n = s.length();
  for (int i = 0; n - i >= max; i  ) {
    c = "";
    for (int j = max; j <= n - i; j  ) {
      c = s.substr(i, j);
      if (checkSym(c, 0, j - 1) && j > max) {
        max = j;
        d = c;
      }
    }
  }
  cout << d;
}

CodePudding user response:

The code looks unreadable. Nevertheless at least this function

bool checkSym(string s, int left, int right) {
  if (left >= right)
    return true;
  else {
    if (int(s[left]) != int(s[right]))
      return false;
    else {
      checkSym(s, left   1, right - 1);
    }
  }
}

can invoke undefined behavior because it returns nothing in this code snippet

    else {
      checkSym(s, left   1, right - 1);
    }

You need to write

    else {
      return checkSym(s, left   1, right - 1);
    }

Also it is unclear why there is used explicit casting to the type int

 if (int(s[left]) != int(s[right]))

instead of just writing

 if ( s[left] != s[right])
  • Related