抱歉,我是一个C ++菜鸟!我一直在寻找解决方案,但似乎无法找到最适合我需要的解决方案。我想读取txt文件的宽度(行的最大char数)和高度(每个文件的最大行数)。计划使用变量来帮助制作动态大小的txt文件/级别。
我之前有固定的宽度和高度!
TXT FILE:房间布局的字符输出简单(空格=楼层,#=墙,X =门):
########
# #
# X
# #
########
问题:认为这是一个简单的问题,但在断开循环和程序不能继续之前,它只读取每个变量中的2个(hNum,wNum)。
- 我做错了什么?
- 我应该以某种方式使用seekg或不同的循环吗?
- 我需要将矢量改为2D矢量吗?
- 实现这一目标的最佳方法是什么?
//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所建议的......但是cudnt正在努力工作。然后踏上了thro,并认为循环没有活动,所以改变了论点。现在出现运行时错误!
问题:表达式:向量下标超出范围!
建议任何人?
string line;
while(getline(infile,line))
{
getline(infile, line);
tempVector.push_back(line);
}
width=line.length();
height=tempVector.size();
答案 0 :(得分: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函数,会有所帮助。只是说;)小屏幕等等。