2013-04-10 4 views
-5

У нас есть 2d-массив, 10x10, с символами. В нем есть определенный персонаж, который нам нужно найти, чтобы мы могли распечатать его и друг друга вокруг него. Пример:Поиск 2d-массива для char (C++)

OOOOOOOOO 
OOOOOOOOO 
OOOOOOOOO 
OOOOOOOOO 
OOOOBOOOO 
OOOEAVOOO 
OOOO OOOO 
OOOOOOOOO 
OOOOOOOOO 
OOOOOOOOO 

так я хотел бы его искать массив для «A» и только соиЬ, что вокруг него, массив все еще там, только лишь показывает, как это:

 

          
          
    B  
    EAV 


    

I не знаю, с чего начать. У меня есть массив, который я просто не знаю, как искать символ «A». и соиЬ массив только, показывающий, и каждый символ с.ш. ю.ш. в.д. з.д. из него

+0

и на ваш вопрос? – stark

+0

вы что-то пробовали? –

+0

Что вы подразумеваете под символами? Определите вокруг. – nommyravian

ответ

0

Попробуйте somethig как это:

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; 
} 

То, что я делаю, работает все линии с внешним «для» и выполнения всех collumns с внутренним «за». Затем я просто проверяю char, я не хочу распечатывать и печатать пробел вместо него. Каждый раз, когда внутренний «for» завершает цикл, код разбивает строку.

+0

Я предполагаю, что правильно понял ваш вопрос. Мне пришлось немного потрудиться, чтобы понять, в чем вопрос. – 2013-04-10 17:52:10

1

Поскольку вы не знаете, с чего начать, вот что вы можете попробовать: Самый простой подход - сначала найти A, используя другую вспомогательную матрицу, которая запоминает, какие ячейки должны быть распечатаны. затем распечатайте ячейки в соответствии со вспомогательной матрицей.

поиск по массиву с двумя вложенными для петель:

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 элементов будет печатать в лучшем случае, вы, вероятно, не нуждается в дополнительной матрицы. Но это первый шаг, который должен сработать.

+0

Кажется, что это сработает, кроме toPrint [i] [j] Я не думаю, что это правильно, я получаю ошибку в j: выражение должно иметь указатель на тип объекта. –

+0

@MichaelRamos i, j - целые числа, здесь нет указателей. Ваше сообщение об ошибке смутило меня. – taocp

+0

хорошо, и вы хотели поставить toPrint [i] [j] вместо A [i] [j], не знаете, что A [i] [j] равно –

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<<' '; 
    } 
} 
+0

. Это будет * почти * работать для данного примера, но не решит заявленную проблему. Он пытается напечатать персонажей, которые соседствуют с «А». –