редактировать диапазон элементов внутри 2d массива?

0

хорошо ive пытался отредактировать элемент массива, поэтому предположим, что у нас есть 2d-массив

поэтому 2d-массив 9 x 9;

     for(... ... ... ++)
         {
            for(.. ... ...++){}
         }

скажем, что код будет использовать другой набор для циклов для отображения 2d-массива его простого массива, ничего необычного

                                00000000
                                00000000
                                00000000...

поэтому, если бы я хотел отобразить E из элементов [1] [0] - [2] [3], как бы я это сделал?

              00000000
              eeeeeeee
              eeee0000
              00000000

то, что я имел в виду, было что-то вроде while (x <y) {array [x++] [y];} но эта идея, похоже, не работает. с удовольствием воспользуется какой-либо помощью. спасибо

for(int i=0; i<9; i++)    //This loops on the rows.
{
    for(int j=0; j<9; j++) //This loops on the columns
    {
        board[i][j] = grid; // set the array to the char on grid '0'.
    }
}
board[s_col][s_row] = 'Z';
while(s_col < e_col)//s_col is the start of the rows and columns
    //{
    //if(s_col != e_col)
{
    ++s_col;
    board[s_col][s_row];
}
//}
//cout << board[s_col][s_row++] <<endl;

// display the array
for(int i=0; i<9; i++)    //This loops on the rows.
{
    for(int j=0; j<9; j++) //This loops on the columns
    {
        cout << board[i][j]  << "  ";
    }
    cout << endl;
}
  • 0
    Для начала, вы можете сделать свой код более конкретным! Одна вещь, которую я уже могу прокомментировать, это то, что C ++ предпочитает преинкремент вместо постинкремента, несмотря на его название (хотя, это не будет иметь значения для вашей проблемы).
  • 0
    THX KUHL. у меня был ++ s_col; я не использовал его; с. Что касается большего количества кода, я вроде как новый, поэтому использование 8 пробелов между каждой строкой было болезненным. если есть простой способ, я еще не знаю
Показать ещё 2 комментария
Теги:
arrays

3 ответа

1
Лучший ответ

Вы были на правильном пути с подходом:

 for(... ... ... ++)
    {
       for(.. ... ...++){}
    }

Вот код, который должен вам помочь:

#include <stdio.h>
#include <memory.h>

#define MAX_ROW 4
#define MAX_COL 8

void fillRange(char fillChar, int startRow, int startCol, int count);

char myArray[MAX_ROW][MAX_COL];
void printArray();

int main(int argc, char *argv[])
{

  memset(myArray, '0', sizeof(myArray));

  printf("\nBefore:\n");
  printArray();
  fillRange('e', 1, 0, 12);
  printf("\nAfter:\n");
  printArray();

}

void fillRange(char fillChar, int startRow, int startCol, int count)
{
  int i, j, filledChars = 0;

  for(i = startRow; i < MAX_ROW; i++)
  {
    for(j = startCol; j < MAX_COL; j++)
    {
      myArray[i][j] = fillChar;
      if(++filledChars == count)
        return;
    }
  }
}

void printArray()
{
  int i, j;

  for(i = 0; i < MAX_ROW; i++)
  {
    for(j = 0; j < MAX_COL; j++)
      putchar(myArray[i][j]);
    printf("\n");
  }

}

Если вы захотели закончить в определенной точке массива, вам просто нужно изменить условие, которое вызывает возврат.

0

Работа с рядом смежных значений проще всего сделать, когда у вас есть базовый смежный массив, и вам не нужно иметь дело с двойной индексацией (см. Ответ Адама на это). Однако в вашем простом случае это также вполне выполнимо:

Вы инициализировали переменные row и column стартовой строкой и столбцом (в вашем случае 0 и 1). Затем вы ходите со своей column пока не достигнете целевого столбца (2), и вы находитесь в целевой строке (3), или вы достигли конца матрицы, в этом случае вы установите столбец в 0 и увеличиваете row.

0

Это одна из многих причин того, почему чем больше кодирования вы делаете, тем больше вы избегаете 2D-массивов, которые у вас есть.

Вместо этого вы используете 1D-массив следующим образом: board[i][j] == board_1D[i*num_columns+j]. Это также означает, что вы можете просто перебирать всю доску в сингле for цикла.

Теперь вы просто вычисляете начальные и конечные индексы вашего диапазона e и просто проверяете, находится ли ваш счетчик в этом диапазоне. Другими словами, у вас есть один оператор if внутри вашего внутреннего цикла.

Разумеется, вы можете преобразовать индексы i, j 2D в эквивалентный индекс 1D и использовать тот же подход. index_1D = i*9+j;

Я оставлю код вам.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню