1

对不起,我是 C++ 菜鸟!我四处寻找解决方案,但似乎找不到最适合我需要的解决方案。我正在尝试读取 txt 文件的宽度(行中的最大字符数)和高度(每个文件的最大行数)。计划使用变量来帮助制作动态大小的 txt 文件/级别。

在此之前我有固定的宽度和高度!

TXT 文件:房间布局的简单字符输出(空间=地板,#=墙,X=门):

########
#      #
#      X
#      #
########

问题:认为这是一个简单的问题,但它只读取每个变量中的 2 个(hNum,wNum),然后中断循环并且程序无法继续。

-我究竟做错了什么?

- 我应该以某种方式使用 seekg 或不同的循环吗?

- 我需要将我的矢量更改为二维矢量吗?

- 实现这一目标的最佳方法是什么?

房间.cpp

//LOAD CURRENT ROOM FROM FILE

ss << RoomNo;
string str = ss.str();

    string fname = ("Room");
fname.append(str);
fname.append(".txt");
infile.open(fname);

infile.clear();
infile.seekg(0);

if(infile.is_open())
{
    // Sets width and height depndant on txt file size

    string line;

   //NOT WORKING!

    while( !infile.eof())
    {
        hNum++;
        getline ( infile, line);
        wNum += line.length();
        break;
    }
    height=hNum;
    width=wNum;

    //END

    // Loop to end of file- to get you all the lines from txt file.
    while(!infile.eof())        
    {
        int i;
        for(int row = 0; row < width; row++)
        {
            infile.getline(RoomFile, 256);
            i = 0;
            for(int col = 0; col < height; col++)
            {
                data.push_back(RoomFile[i]);
                i++;
            }
        }

    }
}
else
{
    cout << "ERROR: infile not open" << endl; 
}
infile.close();

更新

这就是我得到的,尝试按照 Sky 的建议进行操作……但不能全力以赴。然后跨步并认为循环没有激活所以改变了论点。现在出现运行时错误!

问题:表达式:向量下标超出范围!

建议任何人?

            string line;

    while(getline(infile,line))
    {
        getline(infile, line);
        tempVector.push_back(line);
    }
    width=line.length();
    height=tempVector.size();
4

1 回答 1

0

一种可行的方法是创建一个字符串向量并读取整个文件,每行都是向量中的一个字符串。

粗略的例子:

#include <vector>
#include <string>
#include <fstream>

/* ... */

vector<string> content;
string buffer;
while(!infile.eof())
{
  getline(infile, &string, '/n');
  content.push_back(string);
}

width = findMaxLengthOfStrings(content);
height = content.size();

您正在将文件的每一行作为单独的字符串读取。字符串被推到向量上。然后,您可以通过使用 迭代向量轻松找到向量中的哪个字符串最长size()。文件的行长度是size()在向量本身上获得的。

此外,只发布代码的相关部分,即 I/O 函数,也会有所帮助。只是说;)小屏幕尺寸等。

于 2013-03-17T15:15:29.693 回答