Problem p03574 (C++)

Buggy submission (status: Runtime Error):
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <set>
#include <vector>
using namespace std;

int main() {
  int h, w;
  cin >> h >> w;
  vector<string> s(h);
  int i, j;
  for (i = 0; i < h; ++i) {
    cin >> s.at(i);
  }
  for (i = 0; i < h; ++i) {
    for (j = 0; j < w; ++j) {
      int temp = 0;
      if (s.at(i).at(j) == '#') {
        cout << '#';
      } else if (i == 0) {
        if (j == 0) {
          if (s.at(i).at(j + 1) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j + 1) == '#') {
            ++temp;
          }
          cout << temp;
        } else if (j != w - 1) {
          if (s.at(i).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i).at(j + 1) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j + 1) == '#') {
            ++temp;
          }
          cout << temp;
        } else {
          if (s.at(i).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j) == '#') {
            ++temp;
          }
          cout << temp;
        }
      } else if (i != h - 1) {
        if (j == 0) {
          if (s.at(i - 1).at(j) == '#') {
            ++temp;
          }
          if (s.at(i - 1).at(j + 1) == '#') {
            ++temp;
          }
          if (s.at(i).at(j + 1) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j + 1) == '#') {
            ++temp;
          }
          cout << temp;
          continue;
        } else if (j != w - 1) {
          if (s.at(i - 1).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i - 1).at(j) == '#') {
            ++temp;
          }
          if (s.at(i - 1).at(j + 1) == '#') {
            ++temp;
          }
          if (s.at(i).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i).at(j + 1) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j + 1) == '#') {
            ++temp;
          }
          cout << temp;
          continue;
        } else {
          if (s.at(i - 1).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i - 1).at(j) == '#') {
            ++temp;
          }
          if (s.at(i).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j) == '#') {
            ++temp;
          }
          cout << temp;
          continue;
        }
      } else {
        if (j == 0) {
          if (s.at(i - 1).at(j) == '#') {
            ++temp;
          }
          if (s.at(i - 1).at(j + 1) == '#') {
            ++temp;
          }
          if (s.at(i).at(j + 1) == '#') {
            ++temp;
          }
          cout << temp;
        } else if (j != w - 1) {
          if (s.at(i).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i).at(j + 1) == '#') {
            ++temp;
          }
          if (s.at(i - 1).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i - 1).at(j) == '#') {
            ++temp;
          }
          if (s.at(i - 1).at(j + 1) == '#') {
            ++temp;
          }
          cout << temp;
        } else {
          if (s.at(i).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i - 1).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i - 1).at(j) == '#') {
            ++temp;
          }
          cout << temp;
        }
      }
    }
    cout << endl;
  }
  return 0;
}

Fixed submission:
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <set>
#include <vector>
using namespace std;

int main() {
  int h, w;
  cin >> h >> w;
  vector<string> s(h);
  int i, j;
  for (i = 0; i < h; ++i) {
    cin >> s.at(i);
  }
  if (h == 1) {
    if (w == 1) {
      if (s.at(0).at(0) == '#') {
        cout << '#' << endl;
        return 0;
      } else {
        cout << 0 << endl;
        return 0;
      }
    } else {
      for (j = 0; j < w; ++j) {
        int temp = 0;
        if (s.at(0).at(j) == '#') {
          cout << '#';
        } else if (j == 0) {
          if (s.at(0).at(j + 1) == '#') {
            ++temp;
          }
          cout << temp;
        } else if (j != w - 1) {
          if (s.at(0).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(0).at(j + 1) == '#') {
            ++temp;
          }
          cout << temp;
        } else {
          if (s.at(0).at(j - 1) == '#') {
            ++temp;
          }
          cout << temp;
        }
      }
      cout << endl;
      return 0;
    }
  } else if (w == 1) {
    for (j = 0; j < h; ++j) {
      int temp = 0;
      if (s.at(j).at(0) == '#') {
        cout << '#' << endl;
      } else if (j == 0) {
        if (s.at(j + 1).at(0) == '#') {
          ++temp;
        }
        cout << temp << endl;
      } else if (j != h - 1) {
        if (s.at(j - 1).at(0) == '#') {
          ++temp;
        }
        if (s.at(j + 1).at(0) == '#') {
          ++temp;
        }
        cout << temp << endl;
      } else {
        if (s.at(j - 1).at(0) == '#') {
          ++temp;
        }
        cout << temp << endl;
      }
    }
    return 0;
  }
  for (i = 0; i < h; ++i) {
    for (j = 0; j < w; ++j) {
      int temp = 0;
      if (s.at(i).at(j) == '#') {
        cout << '#';
      } else if (i == 0) {
        if (j == 0) {
          if (s.at(i).at(j + 1) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j + 1) == '#') {
            ++temp;
          }
          cout << temp;
        } else if (j != w - 1) {
          if (s.at(i).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i).at(j + 1) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j + 1) == '#') {
            ++temp;
          }
          cout << temp;
        } else {
          if (s.at(i).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j) == '#') {
            ++temp;
          }
          cout << temp;
        }
      } else if (i != h - 1) {
        if (j == 0) {
          if (s.at(i - 1).at(j) == '#') {
            ++temp;
          }
          if (s.at(i - 1).at(j + 1) == '#') {
            ++temp;
          }
          if (s.at(i).at(j + 1) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j + 1) == '#') {
            ++temp;
          }
          cout << temp;
          continue;
        } else if (j != w - 1) {
          if (s.at(i - 1).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i - 1).at(j) == '#') {
            ++temp;
          }
          if (s.at(i - 1).at(j + 1) == '#') {
            ++temp;
          }
          if (s.at(i).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i).at(j + 1) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j + 1) == '#') {
            ++temp;
          }
          cout << temp;
          continue;
        } else {
          if (s.at(i - 1).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i - 1).at(j) == '#') {
            ++temp;
          }
          if (s.at(i).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i + 1).at(j) == '#') {
            ++temp;
          }
          cout << temp;
          continue;
        }
      } else {
        if (j == 0) {
          if (s.at(i - 1).at(j) == '#') {
            ++temp;
          }
          if (s.at(i - 1).at(j + 1) == '#') {
            ++temp;
          }
          if (s.at(i).at(j + 1) == '#') {
            ++temp;
          }
          cout << temp;
        } else if (j != w - 1) {
          if (s.at(i).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i).at(j + 1) == '#') {
            ++temp;
          }
          if (s.at(i - 1).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i - 1).at(j) == '#') {
            ++temp;
          }
          if (s.at(i - 1).at(j + 1) == '#') {
            ++temp;
          }
          cout << temp;
        } else {
          if (s.at(i).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i - 1).at(j - 1) == '#') {
            ++temp;
          }
          if (s.at(i - 1).at(j) == '#') {
            ++temp;
          }
          cout << temp;
        }
      }
    }
    cout << endl;
  }
  return 0;
}