Problem p00736 (C++) — buggy submission, verdict: Runtime Error

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <string>
using namespace std;
int main() {
  int h, i;
  int p, q, r;
  int ln, ct;
  string s, t;
  while (cin >> s && s[0] != '.') {
    ct = 0;
    for (p = 0; p < 3; p++) {
      for (q = 0; q < 3; q++) {
        for (r = 0; r < 3; r++) {
          t = s;
          ln = t.length();
          for (i = 0; i < ln; i++) {
            if (0) {
            } else if (t[i] == 'P') {
              t[i] = '0' + p;
            } else if (t[i] == 'Q') {
              t[i] = '0' + q;
            } else if (t[i] == 'R') {
              t[i] = '0' + r;
            }
          }
          while ((ln = t.length()) != 1) {
            do {
              h = 0;
              for (i = 0; i < ln - 1; i++) {
                if (t[i] == '-' && '0' <= t[i + 1] && t[i + 1] <= '3') {
                  t.erase(i, 1);
                  t[i] = 2 - t[i] + '0' + '0';
                  h = 1;
                }
              }
            } while (h);
            do {
              h = 0;
              for (i = 0; i < ln - 4; i++) {
                if (t[i] == '(' && t[i + 4] == ')') {
                  if (0) {
                  } else if (t[i + 2] == '*') {
                    if (0) {
                    } else if (t[i + 1] == '0' || t[i + 3] == '0') {
                      t[i + 4] = '0';
                    } else if (t[i + 1] == '2' && t[i + 3] == '2') {
                      t[i + 4] = '2';
                    } else {
                      t[i + 4] = '1';
                    }
                    t.erase(i, 4);
                    h = 1;
                  } else if (t[i + 2] == '+') {
                    if (0) {
                    } else if (t[i + 1] == '2' || t[i + 3] == '2') {
                      t[i + 4] = '2';
                    } else if (t[i + 1] == '0' && t[i + 3] == '0') {
                      t[i + 4] = '0';
                    } else {
                      t[i + 4] = '1';
                    }
                    t.erase(i, 4);
                    h = 1;
                  }
                }
              }
            } while (h);
          }
          if (t[0] == '2')
            ct++;
        }
      }
    }
    cout << ct << endl;
  }
  return 0;
}

Error: 0

Fixed submission:

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <string>
using namespace std;
int main() {
  int h, i;
  int p, q, r;
  int ln, ct;
  string s, t;
  while (cin >> s && s[0] != '.') {
    ct = 0;
    for (p = 0; p < 3; p++) {
      for (q = 0; q < 3; q++) {
        for (r = 0; r < 3; r++) {
          t = s;
          ln = t.length();
          for (i = 0; i < ln; i++) {
            if (0) {
            } else if (t[i] == 'P') {
              t[i] = '0' + p;
            } else if (t[i] == 'Q') {
              t[i] = '0' + q;
            } else if (t[i] == 'R') {
              t[i] = '0' + r;
            }
          }
          while (t.length() != 1) {
            do {
              h = 0;
              for (i = 0; i < ln - 1; i++) {
                if (t[i] == '-' && '0' <= t[i + 1] && t[i + 1] <= '3') {
                  t.erase(i, 1);
                  t[i] = 2 - t[i] + '0' + '0';
                  h = 1;
                }
              }
            } while (h);
            do {
              h = 0;
              for (i = 0; i < ln - 2; i++) {
                if (t[i] == '(' && t[i + 4] == ')') {
                  if (0) {
                  } else if (t[i + 2] == '*') {
                    if (0) {
                    } else if (t[i + 1] == '0' || t[i + 3] == '0') {
                      t[i + 4] = '0';
                    } else if (t[i + 1] == '2' && t[i + 3] == '2') {
                      t[i + 4] = '2';
                    } else {
                      t[i + 4] = '1';
                    }
                    t.erase(i, 4);
                    h = 1;
                  } else if (t[i + 2] == '+') {
                    if (0) {
                    } else if (t[i + 1] == '2' || t[i + 3] == '2') {
                      t[i + 4] = '2';
                    } else if (t[i + 1] == '0' && t[i + 3] == '0') {
                      t[i + 4] = '0';
                    } else {
                      t[i + 4] = '1';
                    }
                    t.erase(i, 4);
                    h = 1;
                  }
                }
              }
            } while (h);
          }
          if (t[0] == '2')
            ct++;
        }
      }
    }
    cout << ct << endl;
  }
  return 0;
}