Problem p03574 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
using namespace std;

int main() {
  int H, W;
  cin >> H >> W;
  string S;

  for (int i = 0; i < H; i++) {
    string Si;
    cin >> Si;
    S += Si;
  }

  for (int i = 0; i < H; i++) {
    for (int j = 0; j < W; j++) {
      int count = 0;
      int k = i * W + j;
      if (S.at(k) == '#') {
        cout << '#';
        if (k % W == W - 1) {
          cout << endl;
        }
        continue;
      } else if (i == 0 && j == 0) {
        if (S.at(k + 1) == '#') {
          count++;
        }
        if (S.at(k + W) == '#') {
          count++;
        }
        if (S.at(k + W + 1) == '#') {
          count++;
        }
      }

      else if (i == 0 && j == W - 1) {
        if (S.at(k - 1) == '#') {
          count++;
        }
        if (S.at(k + W - 1) == '#') {
          count++;
        }
        if (S.at(k + W) == '#') {
          count++;
        }
      }

      else if (i == H - 1 && j == 0) {
        if (S.at(k - W) == '#') {
          count++;
        }
        if (S.at(k - W + 1) == '#') {
          count++;
        }
        if (S.at(k + 1) == '#') {
          count++;
        }
      }

      else if (i == H - 1 && j == W - 1) {
        if (S.at(k - W - 1) == '#') {
          count++;
        }
        if (S.at(k - W) == '#') {
          count++;
        }
        if (S.at(k - 1) == '#') {
          count++;
        }
      }

      else if (i == 0) {
        if (S.at(k - 1) == '#') {
          count++;
        }
        if (S.at(k + 1) == '#') {
          count++;
        }
        if (S.at(k + W - 1) == '#') {
          count++;
        }
        if (S.at(k + W) == '#') {
          count++;
        }
        if (S.at(k + W + 1) == '#') {
          count++;
        }
      }

      else if (i == H - 1) {
        if (S.at(k - W - 1) == '#') {
          count++;
        }
        if (S.at(k - W) == '#') {
          count++;
        }
        if (S.at(k - W + 1) == '#') {
          count++;
        }
        if (S.at(k - 1) == '#') {
          count++;
        }
        if (S.at(k + 1) == '#') {
          count++;
        }
      }

      else if (j == 0) {
        if (S.at(k - W) == '#') {
          count++;
        }
        if (S.at(k - W + 1) == '#') {
          count++;
        }
        if (S.at(k + 1) == '#') {
          count++;
        }
        if (S.at(k + W) == '#') {
          count++;
        }
        if (S.at(k + W + 1) == '#') {
          count++;
        }
      }

      else if (j == W - 1) {
        if (S.at(k - W - 1) == '#') {
          count++;
        }
        if (S.at(k - W) == '#') {
          count++;
        }
        if (S.at(k - 1) == '#') {
          count++;
        }
        if (S.at(k + W - 1) == '#') {
          count++;
        }
        if (S.at(k + W) == '#') {
          count++;
        }
      }

      else {
        if (S.at(k - W - 1) == '#') {
          count++;
        }
        if (S.at(k - W) == '#') {
          count++;
        }
        if (S.at(k - W + 1) == '#') {
          count++;
        }
        if (S.at(k - 1) == '#') {
          count++;
        }
        if (S.at(k + 1) == '#') {
          count++;
        }
        if (S.at(k + W - 1) == '#') {
          count++;
        }
        if (S.at(k + W) == '#') {
          count++;
        }
        if (S.at(k + W + 1) == '#') {
          count++;
        }
      }
      cout << count;
      if (k % W == W - 1) {
        cout << endl;
      }
    }
  }
}


Fixed submission:
#include <bits/stdc++.h>
using namespace std;

int main() {
  int H, W;
  cin >> H >> W;
  string S;

  for (int i = 0; i < H; i++) {
    string Si;
    cin >> Si;
    S += Si;
  }

  for (int i = 0; i < H; i++) {
    for (int j = 0; j < W; j++) {
      int count = 0;
      int k = i * W + j;
      if (S.at(k) == '#') {
        cout << '#';
        if (k % W == W - 1) {
          cout << endl;
        }
        continue;
      } else if (H == 1 && W == 1) {
        count = 0;
      }

      else if (H == 1) {
        if (j == 0) {
          if (S.at(k + 1) == '#') {
            count++;
          }
        } else if (j == W - 1) {
          if (S.at(k - 1) == '#') {
            count++;
          }
        } else {
          if (S.at(k - 1) == '#') {
            count++;
          }
          if (S.at(k + 1) == '#') {
            count++;
          }
        }
      }

      else if (W == 1) {
        if (i == 0) {
          if (S.at(k + W) == '#') {
            count++;
          }
        } else if (i == H - 1) {
          if (S.at(k - W) == '#') {
            count++;
          }
        } else {
          if (S.at(k - W) == '#') {
            count++;
          }
          if (S.at(k + W) == '#') {
            count++;
          }
        }
      }

      else if (i == 0 && j == 0) {
        if (S.at(k + 1) == '#') {
          count++;
        }
        if (S.at(k + W) == '#') {
          count++;
        }
        if (S.at(k + W + 1) == '#') {
          count++;
        }
      }

      else if (i == 0 && j == W - 1) {
        if (S.at(k - 1) == '#') {
          count++;
        }
        if (S.at(k + W - 1) == '#') {
          count++;
        }
        if (S.at(k + W) == '#') {
          count++;
        }
      }

      else if (i == H - 1 && j == 0) {
        if (S.at(k - W) == '#') {
          count++;
        }
        if (S.at(k - W + 1) == '#') {
          count++;
        }
        if (S.at(k + 1) == '#') {
          count++;
        }
      }

      else if (i == H - 1 && j == W - 1) {
        if (S.at(k - W - 1) == '#') {
          count++;
        }
        if (S.at(k - W) == '#') {
          count++;
        }
        if (S.at(k - 1) == '#') {
          count++;
        }
      }

      else if (i == 0) {
        if (S.at(k - 1) == '#') {
          count++;
        }
        if (S.at(k + 1) == '#') {
          count++;
        }
        if (S.at(k + W - 1) == '#') {
          count++;
        }
        if (S.at(k + W) == '#') {
          count++;
        }
        if (S.at(k + W + 1) == '#') {
          count++;
        }
      }

      else if (i == H - 1) {
        if (S.at(k - W - 1) == '#') {
          count++;
        }
        if (S.at(k - W) == '#') {
          count++;
        }
        if (S.at(k - W + 1) == '#') {
          count++;
        }
        if (S.at(k - 1) == '#') {
          count++;
        }
        if (S.at(k + 1) == '#') {
          count++;
        }
      }

      else if (j == 0) {
        if (S.at(k - W) == '#') {
          count++;
        }
        if (S.at(k - W + 1) == '#') {
          count++;
        }
        if (S.at(k + 1) == '#') {
          count++;
        }
        if (S.at(k + W) == '#') {
          count++;
        }
        if (S.at(k + W + 1) == '#') {
          count++;
        }
      }

      else if (j == W - 1) {
        if (S.at(k - W - 1) == '#') {
          count++;
        }
        if (S.at(k - W) == '#') {
          count++;
        }
        if (S.at(k - 1) == '#') {
          count++;
        }
        if (S.at(k + W - 1) == '#') {
          count++;
        }
        if (S.at(k + W) == '#') {
          count++;
        }
      }

      else {
        if (S.at(k - W - 1) == '#') {
          count++;
        }
        if (S.at(k - W) == '#') {
          count++;
        }
        if (S.at(k - W + 1) == '#') {
          count++;
        }
        if (S.at(k - 1) == '#') {
          count++;
        }
        if (S.at(k + 1) == '#') {
          count++;
        }
        if (S.at(k + W - 1) == '#') {
          count++;
        }
        if (S.at(k + W) == '#') {
          count++;
        }
        if (S.at(k + W + 1) == '#') {
          count++;
        }
      }
      cout << count;
      if (k % W == W - 1) {
        cout << endl;
      }
    }
  }
}