#include <iostream>
#include <cstdio>
using namespace std;
char a[110][110]; //根据雷区设定的数组大小
void fun(int n,int m)
{
for(int i=1;i<=n;i++) //以字符串的形式往二维数组里填充内容
scanf("%s",a[i]+1); //a[i+1]空出左边的一列
//右边和下边只需要把数组设置大,就会空出来了
int dx[8]={-1,-1,-1,0,0,1,1,1};//方向数组,实现数据和控制分离
int dy[8]={-1,0,1,-1,1,-1,0,1};
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]=='*')
cout<<'*';
else
{
int sum=0;
for(int o=0;o<8;o++) //找周围雷的个数
if(a[i+dx[o]][j+dy[o]]=='*')
sum++;
cout<<sum;
}
}
cout<<endl;
}
}
int main()
{
int n,m;
cin>>n>>m;
fun(n,m);
return 0;
}
备注:对于二维数组:a[0][0]不是地址,&a[0][0]才是地址,但a[0]是a[0][0]的地址,a[0]+1是a[0][1]的地址.
所以在输入的时候,若是输入a[i][j],就必须用取地址符。