在2d数组中搜索char(c ++)

时间:2013-04-10 17:33:18

标签: c++ arrays multidimensional-array

我们有一个2d数组,10x10,带有字符。在我们需要找到的某个角色中,我们可以将它打印出来,并将其周围的每个角色打印出来。实施例:

OOOOOOOOO
OOOOOOOOO
OOOOOOOOO
OOOOOOOOO
OOOOBOOOO
OOOEAVOOO
OOOO OOOO
OOOOOOOOO
OOOOOOOOO
OOOOOOOOO

所以我希望它能够搜索数组中的'A'并且只有cout它周围的东西,数组仍然存在,只是显示如下:


         
         
    B    
   EAV   


         

我不知道从哪里开始。我有阵列我只是不知道如何搜索字符'A'。并且cout数组只显示A和它的每个字符NSEW

3 个答案:

答案 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<<' ';
   }
 }