|
有一个二维字符型矩阵,其中已经有两种数据:‘0’和‘F’。
要求,将字符‘0’替换成周围8个‘F'的个数,并输出替换前后对比。
如:原始矩阵 替换后矩阵
0 0 f 0 f 0 1 f 4 f
0 0 0 f f 1 2 2 f f
f 0 0 0 0 f 1 1 2 2
(暂定为5列)
我自己写了一个函数,比较繁琐,应该有更简洁的办法。
请大家帮我想想。
在VC6.0中编译通过。
void statmap(char Arr[][5],int row,int col)
{
int i,j;
int count;
for (i=0;i<row;i++)
for (j=0;j<col;j++)
{
if ('f'!=Arr[j]) //判断字符是否为零
{
count=0;
if((0<i&&i<row-1) &&(0<j&&j<col-1))//判断不在特殊位置
{
if('f'==Arr[i-1][j-1]) count++;
if('f'==Arr[i-1][j]) count++;
if('f'==Arr[i-1][j+1]) count++;
if('f'==Arr[j-1]) count++;
if('f'==Arr[j+1]) count++;
if('f'==Arr[i+1][j-1]) count++;
if('f'==Arr[i+1][j]) count++;
if('f'==Arr[i+1][j+1]) count++;
}
//判断在特殊位置
else if (i==0)//判断在第一行
{
if (0<j&&j<col-1)//判断不是在两头
{
if('f'==Arr[j-1]) count++;
if('f'==Arr[j+1]) count++;
if('f'==Arr[i+1][j-1]) count++;
if('f'==Arr[i+1][j]) count++;
if('f'==Arr[i+1][j+1]) count++;
}
else
{
if(j==0)//判断是在点(0,0)
{
if('f'==Arr[j+1]) count++;
if('f'==Arr[i+1][j]) count++;
if('f'==Arr[i+1][j+1]) count++;
}
else// 点(0,col-1)
{
if('f'==Arr[j-1]) count++;
if('f'==Arr[i+1][j-1]) count++;
if('f'==Arr[i+1][j]) count++;
}
}
}
else if (i==row-1)//判断在最后一行
{
if (0<j&&j<col-1)
{
if('f'==Arr[i-1][j-1]) count++;
if('f'==Arr[i-1][j]) count++;
if('f'==Arr[i-1][j+1]) count++;
if('f'==Arr[j-1]) count++;
if('f'==Arr[j+1]) count++;
}
else
{
if(j==0) //点(row-1,0)
{
if('f'==Arr[i-1][j]) count++;
if('f'==Arr[i-1][j+1]) count++;
if('f'==Arr[j+1]) count++;
}
else//点(row-1,col-1)
{
if('f'==Arr[i-1][j-1]) count++;
if('f'==Arr[i-1][j+1]) count++;
if('f'==Arr[j-1]) count++;
}
}
}
else if (j==0&&0<i&&i<row-1)//判断在第一列的中间部分
{
if('f'==Arr[i-1][j]) count++;
if('f'==Arr[i-1][j+1]) count++;
if('f'==Arr[j+1]) count++;
if('f'==Arr[i+1][j]) count++;
if('f'==Arr[i+1][j+1]) count++;
}
else if (j==col-1&&0<i&&i<row-1)
{
if('f'==Arr[i-1][j-1]) count++;
if('f'==Arr[i-1][j]) count++;
if('f'==Arr[j-1]) count++;
if('f'==Arr[i+1][j-1]) count++;
if('f'==Arr[i+1][j]) count++;
}
Arr[j]=count+'0';
}
}
} |
|