В строке
char ** domain[] = new char * [rows];
char ** domain[]
пытается создать массив char **
. Если компилятор не жаловался на отсутствие допустимого размера массива в []
, и у вас была бы трехмерная структура. Вы хотите просто старый char **
для 2D-структуры, поэтому
char ** domain = new char * [rows];
Цикл, заполняющий внутреннее измерение, является правильным, за исключением того, что он теряет путь к начальной точке domain
for(int i = 0; i < rows; i++)
{
*domain = new char[columns];
domain++;
}
Должно быть что-то вроде
char ** temp = domain;
for(int i = 0; i < rows; i++)
{
*temp = new char[columns];
temp++;
}
Чтобы сохранить начальную точку, но для этого случая запись массива, вероятно, является более разумной и удобной для чтения опцией.
for(int i = 0; i < rows; i++)
{
domain[i] = new char[columns];
}
На searchArray
. Нужно знать, что он получает два измерения (const char **
) и что существует два максимальных размера (maxRow
и maxColumn
). Это будет выглядеть примерно так:
char searchArray(const char ** list,
char letter,
int maxRow,
int maxColumn)
{
>code goes here
}
Код здесь - это ваша проблема, но, вероятно, это будут два вложенных цикла for
, повторяющихся в maxRow
и maxColumn
и возвращающихся при обнаружении letter
.
Но ... зачем возвращать char
? Возвращение местоположения в массиве гораздо полезнее. Мы могли бы использовать std::pair
, но если std::vector
запрещен, pair
, вероятно, также. Вместо этого рассмотрим что-то вроде следующего:
struct coord
{
int row;
int column;
};
coord searchArray(const char ** list,
char letter,
int maxRow,
int maxColumn)
{
coord location;
>code goes here
return location;
}
Если элемент не найден, установите для row
и column
значение, которое невозможно получить равным -1, чтобы можно было легко проверить наличие не найденного случая.
Остановитесь здесь, если вы не хотите <толкование удалено> с умом вашего учителя.
Выше не строит 2D массив. Вы не можете получить динамически размещенный 2D-массив в C ++. У вас есть массив массивов. У этого есть пара недостатков: посмотрите на всю работу, которая сводится к сшиванию, и компьютеры любят, когда все идет по прямой линии. Массив массивов нет. Каждое различное распределение может быть где-то совершенно разным в памяти, заставляя программу переключаться, ждать и загружать разные куски памяти. Иногда программа будет тратить больше времени на ожидание поиска и загрузки материала, чем на саму работу. Это отстой.
Решение состоит в том, чтобы создать одномерный массив и сделать его похожим на как двумерный массив. Вот пример этого из C ++ FAQ
Из этого примера вы узнаете много полезных вещей, не последним из которых являются RAII и Правило трех , два понятия, без которых вы не можете написать не тривиальный высококачественный код C ++.