我正在尝试显示从文件中检索到的二维数组,但无法正确显示它。在将文件读入2D数组后,它也不会立即将元素从句点切换到空格。
我只是试图在屏幕上显示空白字段,并能够使用getField函数加载更多字段。
C++
class Field
{
private: string xy[20][50];
public:
Field() {}
void getField(string name)
{
ifstream file;
file.open(name);
for (int x = 0; x < 20; x++)
{
for (int y = 0; y < 50; y++)
{//periods should be changed to spaces
file >> xy[x][y];
if (xy[x][y] == ".")
{
xy[x][y] = " ";
}
}
}
file.close();
}
//displaying field
void display()
{
for (int x = 0; x < 20; x++)
{
for (int y = 0; y < 50; y++)
{
cout << xy[x][y];
cout << endl;
}
}
}
};
int main()
{
Field field1;
field1.getField("field1.txt.txt");
field1.display();
system("pause");
}
`````````````````````````````````````````````````
the txt file is pretty much this 20 times:
|................................................|
答案 0 :(得分:2)
问题是这样的:
private: string xy[20][50];
然后执行此操作,希望将每个字符读入数组的每个元素:
file >> xy[x][y];
问题在于,由于xy
数组的类型为std::string
,因此整个字符串都被读入xy[x][y]
,而不是单个字符。
您可能想要的是这样:
private: char xy[20][50];
然后另一个变化是:
file >> xy[x][y];
if (xy[x][y] == '.')
{
xy[x][y] = ' ';
}
请注意-您可以先将全部内容读入数组,而无需检查字符是否为.
,最后,请使用std::replace进行替换:
#include <algorithm>
//...read everything first
for (int x = 0; x < 20; x++)
{
for (int y = 0; y < 50; y++)
file >> xy[x][y];
}
// now replace
std::replace(&xy[0][0], &xy[0][0] + sizeof(xy), '.', ' ');