我只需要从文件中读取数字。该文件包含:
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;
}
谢谢。
我在这里只会使用简单的流提取操作(实际上,也许是boost::regex_split
(,没有std::string
解析。
-
使用
operator>>
读取第一个0
,然后std::ignore
删除尾随换行符,或std::getline
并检查是否存在额外的(非空格(字符 -
std::ignore
或std::getline
并验证####
行。 -
将
operator>>
与char
一起使用,并验证它是否#
。 -
在循环中,尝试
operator>>
int
默认为0
,如果失败,in.clear()
并使用带有char
的operator>>
来读取似乎不是数字的内容,而是|
或#
。根据此继续循环。 -
在第二个项目符号点之后处理行的其余部分
#
始终检查每个提取操作是否成功。
只需忽略其他输入并保存数字,检查我做了什么,它适用于您发布的同一文本文件,最后向量必须具有 0 2 2 作为值。截图
我忘了将所有其他字符设为 0,但现在这不是问题,只需替换继续; 屏幕截图中的语句为 nums.push_back(0(;