我们有一个2d数组,10x10,带有字符。在我们需要找到的某个角色中,我们可以将它打印出来,并将其周围的每个角色打印出来。实施例:
OOOOOOOOO
OOOOOOOOO
OOOOOOOOO
OOOOOOOOO
OOOOBOOOO
OOOEAVOOO
OOOO OOOO
OOOOOOOOO
OOOOOOOOO
OOOOOOOOO
所以我希望它能够搜索数组中的'A'并且只有cout它周围的东西,数组仍然存在,只是显示如下:
B EAV
我不知道从哪里开始。我有阵列我只是不知道如何搜索字符'A'。并且cout数组只显示A和它的每个字符NSEW
答案 0 :(得分:1)
由于您不知道从哪里开始,以下是您可能想要尝试的内容:
最简单的方法是首先找到A
,使用另一个辅助矩阵来记住哪些单元格应该打印出来。然后根据辅助矩阵打印出细胞。
使用两个嵌套的for循环搜索数组:
const int ROWS = 10; //^^change these values according to your application
const int COLS = 10;
bool toPrint[ROWS][COLS] = {false};
for (int i = 0; i < ROWS; ++i )
{
for (int j = 0; j < COLS; ++j)
{
if (A[i][j] == 'A')
{
//set Tags:
toPrint[i][j] = true;
//below, first check whether index pair are valid
// i left them to you since they are straightforward
//you have to consider when A is at border of the matrix
//check <i,j-1> are valid or not, same for other index pairs
toPrint[i][j-1] = true; //West
toPrint[i][j+1] = true; //East
toPrint[i-1][j] = true; //North
toPrint[i+1][j] =true; //South
}
}
}
您现在可以根据A
;
toPrint
for (int i = 0; i < ROWS; ++i )
{
for (int j = 0; j < COLS; ++j)
{
if (toPrint[i][j])
{
cout << A[i][j] ;
}
else
{
cout << " ";
}
}
cout <<endl;
}
您当然可以尝试优化内存或使用其他智能方式,例如,最多只能打印5个元素,您可能不需要额外的矩阵。但这是应该发挥作用的第一步。
答案 1 :(得分:0)
尝试这样的事情:
for(i1=0; i1<10; i1++){
for(i2=0; i2<10; i2++){
if(vec[i1][i2] != '0')
cout << ' ';
else cout << vec[i1][i2];
}
cout << endl;
}
我正在做的是使用外部“for”运行所有行并使用内部“for”运行所有collumns。然后我只检查我不想打印的字符并打印一个空格而不是它。每次内部“for”完成一个循环时,代码就会断开一条线。
答案 2 :(得分:0)
char arr[X][Y];
// fill in arr
for(const auto &i : arr)
{
for(auto j : i)
{
if(j != 'O')
std::cout<<j;
else
std::cout<<' ';
}
}