TとAからなるchar行列が与えられた宿題として関数を作成する必要があります。この行列上にある島の数はTであり、Aスペイン語で水。私がまだできたことはもう一つ問題があり、私はパラメータとして与えられた行列を修正することができます。私は関数を呼び出す前に行列をコピーして新しい行列を送ることを考えましたが、私はこれを行うことができませんでした。タイトルが書いているように、私は絶対にどんな種類のライブラリ関数(strcopyなど)も必要としません。私は念のために私のコードを渡します:ライブラリ関数を持たないコピー文字行列(char **)
int islands(char** map, int col, int row){
char** aux = map;//I don't think this line does anything
int cont = 0;
for (int i = 0; i < col; i++) {
for (int j = 0; j < row; j++) {
char c = aux[i][j];
if (aux[i][j] =='T') {
cont++;
deleteLand(aux, i,j, col, row);
}
}
}
int a = cont;
return cont;
}
void deleteLand(char** map, int t1,int t2, int col, int row) {
map[t1][t2] = 'A';
for (int i = -1; i <= 1; i++) {
for (int j = -1; j <= 1; j++) {
if (!(i==0 && j ==0)&&(t1 + i >= 0 && t1 + i < col) && (t2 + j >= 0 && t2 + j < row)) {
if (map[t1 + i][t2 + j] == 'T') {
int tc = t1+i;
int tr = t2 + j;
deleteLand(map, tc,tr,col,row);
}
}
}
}
}
そして、それが返すものの例: エントリ:([ 'T'、 'T'、 '' 'A'、 'A' を、 'T' 'A'、 'A'、 '' 'T'、 'T'、 'A']、3、4) 戻り値:2
は、それが十分に明らかであると思います。また、これを書いている間に、私は行列の値を入力して終了時に再びコピーする際にそれを保存することができることを認識しましたが、実際には同じであると思います。助けてくれてありがとう
行列は一般的に2次元配列の同義語です。 'char'のようなものは' 'char'へのポインタへのポインタです。このような構造には使用できません。 2D配列が必要な場合は、 'int(* array2d)[COLS]'を使います。 – Olaf
それは私の行の1つだけを与えるだろうか? –
@BrunoVezoli *私は絶対にライブラリ関数なしでこれをする必要があります* - あなた自身の関数ライブラリ、つまり自分自身の 'strcpy'などを作成するのを止めるものはありません。このすべては 'deleteLand'関数の内部にあります。 – PaulMcKenzie