[英]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.