簡體   English   中英

復制不帶庫函數的char矩陣(char **)

[英]Copy char matrix (char**) without library functions

我需要做一個家庭作業功能,給定一個由T和A組成的char矩陣,返回該矩陣上存在的島嶼數量,西班牙語為T表示土地,A表示水。 我可以做的所有這些,還有另一個問題,我可以修改作為參數給定的矩陣。 我想過在調用函數並發送新函數之前先復制矩陣,但我做不到。 正如標題所述,我絕對不需要任何類型的庫函數(例如strcopy)。 我將通過我的代碼以防萬一:

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','A','T''A','A','A''T',' T','A'],3,4)返回:2

希望它足夠清楚。 另外,在編寫此代碼時,我意識到我可以在輸入時保存矩陣的值,然后在退出時再次復制它,但我認為它實際上是相同的。 非常感謝您提供的任何幫助

要復制一個數組(數組中的數據),您需要為其分配空間。 使用副本后,您應該釋放內存。


我想在這種情況下復制數據的唯一原因是在map恢復原始數據。 如果是這樣,更好的解決方案是使用另一個字母“ B”來屏蔽deleteLand訪問過的島。 然后,完成后,您可以快速恢復將所有B更改為T的原始地圖。 它避免了分配和取消分配內存的所有問題。

編輯 :我不得不刪除C ++中的實際代碼,因為與此同時刪除了C ++標簽。

正如我在評論中發布的那樣,我可以在PaulMcKenie的幫助下解決此問題,我將發布代碼,以防萬一它對任何人都有用。

char** copyMatrix(char ** mat, int cols) {
char** newMat = new char*[cols];
for (int i = 0; i < cols; i++) {
    newMat[i] = copyStr(mat[i]);
}
return newMat;
}

而且,正如我之前提到的,我無法使用庫函數,因此我還將發布copyStr:

char* copyStr(char* string) {
char* copia = new char[strLen(string)];
int i = 0;
while (*string) {
    copia[i] = *string;
    *string++;
    i++;
}
copia[i] = *string;
return copia;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM