复制没有库函数的char矩阵(char **)

时间:2016-04-03 23:20:58

标签: c++ matrix

我需要创建一个函数作为家庭作业,给定由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

希望它足够清楚。此外,在写这篇文章时,我意识到我可以在输入时保存矩阵的值,并在退出时再次复制,但我认为它实际上是相同的。非常感谢您提供的任何帮助

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;
}