хорошо 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;
}
Вы были на правильном пути с подходом:
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");
}
}
Если вы захотели закончить в определенной точке массива, вам просто нужно изменить условие, которое вызывает возврат.
Работа с рядом смежных значений проще всего сделать, когда у вас есть базовый смежный массив, и вам не нужно иметь дело с двойной индексацией (см. Ответ Адама на это). Однако в вашем простом случае это также вполне выполнимо:
Вы инициализировали переменные row
и column
стартовой строкой и столбцом (в вашем случае 0
и 1
). Затем вы ходите со своей column
пока не достигнете целевого столбца (2), и вы находитесь в целевой строке (3), или вы достигли конца матрицы, в этом случае вы установите столбец в 0
и увеличиваете row
.
Это одна из многих причин того, почему чем больше кодирования вы делаете, тем больше вы избегаете 2D-массивов, которые у вас есть.
Вместо этого вы используете 1D-массив следующим образом: board[i][j] == board_1D[i*num_columns+j]
. Это также означает, что вы можете просто перебирать всю доску в сингле for
цикла.
Теперь вы просто вычисляете начальные и конечные индексы вашего диапазона e
и просто проверяете, находится ли ваш счетчик в этом диапазоне. Другими словами, у вас есть один оператор if
внутри вашего внутреннего цикла.
Разумеется, вы можете преобразовать индексы i
, j
2D в эквивалентный индекс 1D и использовать тот же подход. index_1D = i*9+j;
Я оставлю код вам.