我需要创建一个函数作为家庭作业,给定由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);
}
}
}
}
}
它返回的一个例子: 条目:( [&#39; T&#39;,&#39; T&#39;,&#39; A&#39; &#39; A&#39;&#39; A&#39;&#39; T&#39; &#39; A&#39;&#39; A&#39;&#39; A&#39; &#39; T&#39;,&#39; T&#39;,&#39; A&#39;],3,4) 返回:2
希望它足够清楚。此外,在写这篇文章时,我意识到我可以在输入时保存矩阵的值,并在退出时再次复制,但我认为它实际上是相同的。非常感谢您提供的任何帮助
答案 0 :(得分:1)
要复制数组(数组中的数据),您需要为其分配空间。使用副本后,你应该释放内存。
我认为在这种情况下复制数据的唯一原因是恢复map
中的原始数据。如果是这样,那么更好的解决方案就是使用另一个字母,比如说&#39; B&#39;来屏蔽deleteLand
中的访问岛屿。完成后,您可以快速恢复原始地图,将所有B更改为T&#39。它避免了分配和释放内存的所有问题。
编辑:我不得不删除C ++中的实际代码,因为在此期间删除了标记C ++。
答案 1 :(得分:0)
正如我在评论中发表的那样,我可以在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;
}