gpt4 book ai didi

c++ - 在 C++ 中不使用索引为二维数组赋值

转载 作者:行者123 更新时间:2023-11-28 04:59:04 26 4
gpt4 key购买 nike

作为挑战,我不使用数组索引来分配或搜索。我想要做的是从文本文件中读取字符并将它们放入一个 15x15 的数组中。我使用索引创建了一个二维数组,但没有它们我无法进行分配。我尝试了两件事,但我无法想出一个可行的主意。我的代码基本上是这样的:

        char **puzzleArray;
puzzleArray = new char*[15];
for (int i = 0; i < 15; i++)
puzzleArray[i] = new char[15];


char *c;
FILE* puzzle;
puzzle = fopen("puzzle.txt", "r");


for (int i=0; i < 15; i++) {
for (int j = 0; j < 15; j++) {
fread(&c, sizeof(char), 1, puzzle);
if (*c != ' ' && *c != '\n')
strcpy(*(puzzleArray + (i * 15)) + j , c);
else
j--;
}

我也试过这样分配:

        char **puzzleArray;
puzzleArray = new char*[15];
for (int i = 0; i < 15; i++)
puzzleArray[i] = new char[15];


char c;
FILE* puzzle;
puzzle = fopen("puzzle.txt", "r");


for (int i=0; i < 15; i++) {
for (int j = 0; j < 15; j++) {
fread(&c, sizeof(char), 1, puzzle);
if (c != ' ' && c != '\n')
*(puzzleArray + (i * 15)) + j = c;
else
j--;
}

但是它们都不起作用,当我做第二个时,编译器给我错误“左值需要作为赋值的左操作数”。

编辑:当我将第二个代码更改为:`

*(*(puzzleArray + (i * 15)) + j)

它编译了,但是当我尝试使用它打印数组中的字符时:

for (int i = 0; i < 15; i++) {
cout << endl;
for (int j = 0; j < 15; j++)
cout << *(*(puzzleArray + (i * 15)) + j);
}

//or using this

for (int i = 0; i < 15; i++) {
cout << endl;
for (int j = 0; j < 15; j++)
cout << puzzleArray[i][j];
}

它不打印字符和程序崩溃。在visual studio中,它说在分配部分发生异常。

最佳答案

您不需要嵌套分配。更重要的是,您的代码不起作用,因为您假设您的嵌套分配将导致连续存储。

const int size = 15;
char* puzzleArray = new char[size*size];

// i'm not going to change file reading logic,
// but it should be done better
// ideally by one read to a buffer
// Also the style seems like a bad mix of C and C++,
// but I can't do much about it with only this little fragment of code.
FILE* puzzle = fopen("puzzle.txt", "r");


for (int i=0; i < size; i++) {
for (int j = 0; j < size; j++) {
char c;
fread(&c, 1, 1, puzzle);
if (c != ' ' && c != '\n')
puzzleArray[i*size + j] = c;
/*
// this does not seem right, i don't know what you're trying to do here
// i'm gonna assume that you want to move to the next line
else
j--;
*/
else
break;
}
}

关于c++ - 在 C++ 中不使用索引为二维数组赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46504283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com