我的功能不替代“。”与“”,它不会显示应有的数组

时间:2019-04-11 22:30:34

标签: c++

我正在尝试显示从文件中检索到的二维数组,但无法正确显示它。在将文件读入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:

    |................................................|

1 个答案:

答案 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), '.', ' ');