int Check_( char(*pc)[1000], char c, int n, int m,int i,int j)
{
int flag=0;
if (c == '.')
{
//上下六个
for (int k = 0; k < 3; k++)
{
//上面的三个
if (pc[i - 1][j - 1 + k] == '*' &&
((i - 1) < n) && ((i - 1) >= 0) &&
((j - 1 + k) < m) && ((j - 1 + k) >= 0)
)
flag++;
//下面的三个
if (pc[i + 1][j - 1 + k] == '*' &&
((i + 1) < n) && ((i + 1) >= 0) &&
((j - 1 + k) < m) && ((j - 1 + k) >= 0)
)
flag++;
}
//左右两个
if (pc[i][j + 1] == '*' && ((j + 1) < m && (j + 1) >= 0))
flag++;
if (pc[i][j - 1] == '*' && ((j - 1) < m && (j - 1) >= 0))
flag++;
return flag;
}
//本身是星号,因为周围八个数所以打印数字不可能大于8,选择返回10
else if (c == '*')
return 10;
else
return 0;
}
int main()
{
int n = 0, m = 0;
scanf("%d %d", &n, &m);
char arrc[1000][1000] = { 0 };
int arrn[1000][1000] = { 0 };
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
scanf(" %c", &arrc[i][j]);
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
arrn[i][j] = Check_(arrc, arrc[i][j], n, m, i, j);
if (arrn[i][j] < 10)
printf("%d", arrn[i][j]);
else
printf("*");
}
printf("\n");
}
return 0;
}