我只需要读取文件中的数字。该文件包含:
0
#####################
# | | | #
# | | | 2#
# | | 2| #
# | | | #
#####################
我只想读第一个0分,分数和其他两个数字。空格我想将它们保存为0.我想将分数保存为int,其余的保存为向量。
因此载体应包含:
score = 0
0000000200200000
我的代码是下一个,但它不起作用:
string line;
vector<int> v;
int sscore = 0, count = 0;
ifstream in ("save_game.txt");
vector<vector<Tile> > vt;
if (in.is_open()) {
while (getline (in, line)) {
if (line.size() == 1)
sscore = str2int(line);
else {
for (int i = 0; i < (int) line.size(); i++) {
string l = line.substr(i, 1);
char c = l[0];
if (l[0] == '#' || l[0] == '|') {count = 0;}
else {
if (c != ' ') {
count = 0;
int ss = str2int(l);
v.push_back(ss);
}
else {
count++;
if (count == 3)
v.push_back(0);
}
}
}
}
}
in.close();
}
这是str2int函数
int str2int(string s){
istringstream reader(s);
unsigned int val = 0;
reader >> val;
return val;
}
非常感谢。
答案 0 :(得分:1)
我在这里只使用简单的流提取操作(实际上,可能是boost::regex_split
),没有std::string
解析。
使用0
阅读第一个operator>>
,然后使用std::ignore
删除尾随的换行符,或std::getline
并检查是否没有额外的(非空白)字符存在
std::ignore
或std::getline
并验证####
行。
将operator>>
与char
一起使用并验证其为#
。
在循环中,尝试operator>>
int
默认为0
,如果失败,in.clear()
并使用operator>>
char
1}}要阅读的内容似乎不是数字,而是|
或#
。根据那个继续循环。
与第一个项目符号点类似,在第二个#
之后处理剩下的行
始终检查每个提取操作是否成功。
答案 1 :(得分:0)
只需忽略其他输入并保存数字,检查我为你发布的同一文本文件所做的工作,最后矢量必须有0 2 2作为值。 screenshot
我忘了把所有其他角色都弄0,但这不是一个问题,现在只需替换继续;屏幕截图中的语句使用nums.push_back(0);