Language: C++

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

int main () {
  string s, S, news, newS;
  int H, W, n;
  cin >> H >> W;
  for (int i = 0; i < H; i++) {
    cin >> s;
    S += s;
  }
  for (int i = 0; i < H; i++) {
    for (int j = 0; j < W; j++) {
      newS += '0';
    }
  }
  for (int i = 0; i < W; i++) {
      news += '0';
  }
  if (H == 1){
    if (W == 1){
      if (s.at(0) == "#"){
        newS.at(0) == "#";
      }
      else {
      }
    }
    else {
    for (int i = 0; i < W; i++){
      n = 0;
      if (S.at(i) == '#') {
        newS.at(i) = '#';
        continue;
      }
      if(i == 0){
        if (S.at(i + 1) == '#') {
            n++;
          }
      }
      else if (i == (W - 1)) {
        if (S.at(i - 1) == '#') {
            n++;
        }
      }
      else {
        if (S.at(i + 1) == '#') {
            n++;
          }
        if (S.at(i - 1) == '#') {
            n++;
        }
      }
      newS.at(i) = '0' + n;
    }
    }
  }
  else if (W == 1){
    for (int i = 0; i < H; i++){
      n = 0;
      if (S.at(i) == '#') {
        newS.at(i) = '#';
        continue;
      }
      if(i == 0){
        if (S.at(i + 1) == '#') {
            n++;
          }
      }
      else if (i == (W - 1)) {
        if (S.at(i - 1) == '#') {
            n++;
        }
      }
      else {
        if (S.at(i + 1) == '#') {
            n++;
          }
        if (S.at(i - 1) == '#') {
            n++;
        }
      }
      newS.at(i) = '0' + n;
    }
  }
  else {
  for (int i = 0; i < H; i++) {
    for (int j = 0; j < W; j++) {
      n = 0;
      if (S.at(i * W + j) == '#') {
        newS.at(i * W + j) = '#';
        continue;
      }
      else if (i == 0) {
        if (j == 0){
          if (S.at(i * W + j + 1) == '#') {
            n++;
          }
          if (S.at(i * W + j + W) == '#') {
            n++;
          }
          if (S.at(i * W + j + W + 1) == '#') {
            n++;
          }
        }
        else if (j == (W - 1)) {
          if (S.at(i * W + j - 1) == '#') {
            n++;
          }
          if (S.at(i * W + j + W - 1) == '#') {
            n++;
          }
          if (S.at(i * W + j + W) == '#') {
            n++;
          }
        }
        else {
          if (S.at(i * W + j - 1) == '#') {
            n++;
          }
          if (S.at(i * W + j + 1) == '#') {
            n++;
          }
          if (S.at(i * W + j + W - 1) == '#') {
            n++;
          }
          if (S.at(i * W + j + W) == '#') {
            n++;
          }
          if (S.at(i * W + j + W + 1) == '#') {
            n++;
          }
        }
      }
      else if (i == (H - 1)) {
        if (j == 0){
          if (S.at(i * W + j + 1) == '#') {
            n++;
          }
          if (S.at(i * W + j - W) == '#') {
            n++;
          }
          if (S.at(i * W + j - W + 1) == '#') {
            n++;
          }
        }
        else if (j == (W - 1)) {
          if (S.at(i * W + j - 1) == '#') {
            n++;
          }
          if (S.at(i * W + j - W - 1) == '#') {
            n++;
          }
          if (S.at(i * W + j - W) == '#') {
            n++;
          }
        }
        else {
          if (S.at(i * W + j - 1) == '#') {
            n++;
          }
          if (S.at(i * W + j + 1) == '#') {
            n++;
          }
          if (S.at(i * W + j - W - 1) == '#') {
            n++;
          }
          if (S.at(i * W + j - W) == '#') {
            n++;
          }
          if (S.at(i * W + j - W + 1) == '#') {
            n++;
          }
        }
      }
      else {
        if (j == 0){
          if (S.at(i * W + j + 1) == '#') {
            n++;
          }
          if (S.at(i * W + j - W) == '#') {
            n++;
          }
          if (S.at(i * W + j - W + 1) == '#') {
            n++;
          }
          if (S.at(i * W + j + W) == '#') {
            n++;
          }
          if (S.at(i * W + j + W + 1) == '#') {
            n++;
          }
        }
        else if (j == (W - 1)) {
          if (S.at(i * W + j - 1) == '#') {
            n++;
          }
          if (S.at(i * W + j - W - 1) == '#') {
            n++;
          }
          if (S.at(i * W + j - W) == '#') {
            n++;
          }
          if (S.at(i * W + j + W - 1) == '#') {
            n++;
          }
          if (S.at(i * W + j + W) == '#') {
            n++;
          }
        }
        else {
          if (S.at(i * W + j - 1) == '#') {
            n++;
          }
          if (S.at(i * W + j + 1) == '#') {
            n++;
          }
          if (S.at(i * W + j - W - 1) == '#') {
            n++;
          }
          if (S.at(i * W + j - W) == '#') {
            n++;
          }
          if (S.at(i * W + j - W + 1) == '#') {
            n++;
          }
          if (S.at(i * W + j + W - 1) == '#') {
            n++;
          }
          if (S.at(i * W + j + W) == '#') {
            n++;
          }
          if (S.at(i * W + j + W + 1) == '#') {
            n++;
          }
        }
      }
      newS.at(i * W + j) = '0' + n;
    }
  }
  }
  for (int i = 0; i < H; i++) {
    for (int j = 0; j < W; j++) {
      news.at(j) = newS.at(i * W + j);
    }
    cout << news << endl;
  }
}


Compiler output:
a.cc: In function 'int main()':
a.cc:22:19: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
   22 |       if (s.at(0) == "#"){
      |           ~~~~~~~~^~~~~~
a.cc:23:20: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
   23 |         newS.at(0) == "#";
      |         ~~~~~~~~~~~^~~~~~