#include<bits/stdc++.h>
using namespace std;
#define endl "\n"

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	int n,m;
	cin>>n>>m;
	vector<vector<char>>a(n+2,vector<char>(m+2));
	for(int i=0;i<n+2;i++){
		if(i==0){
			for(int j=0;j<m+2;j++){
				a[0][j]='0';
			}
		}else if(i==n+1){
            for(int j=0;j<m+2;j++){
				a[n+1][j]='0';
			}
        }
        else{
			a[i][0]='0';
			for(int j=1;j<m+1;j++){
				cin>>a[i][j];
			}
            a[i][m+1]='0';
		}
	}
	for(int i=1;i<n+1;i++){
		for(int j=1;j<m+1;j++){
			if(a[i][j]=='*'){
				cout<<'*';
			}else{
				int x=0;
				if(a[i-1][j-1]=='*')x++;
				if(a[i-1][j]=='*')x++;
				if(a[i-1][j+1]=='*')x++;
				if(a[i][j-1]=='*')x++;
				if(a[i][j+1]=='*')x++;
				if(a[i+1][j-1]=='*')x++;
				if(a[i+1][j]=='*')x++;
				if(a[i+1][j+1]=='*')x++;
				cout<<x;
			}
		}
		cout<<endl;
	}
	return 0;
}

本题难点在于边界处理上稍有不慎就会死循环,我将原数组的四周定义为‘0’字符再循环判断每一个位置即可