如何仅读取文件.txt中的数字



我只需要从文件中读取数字。该文件包含:

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::ignorestd::getline并验证####行。

  • operator>>char一起使用,并验证它是否#

  • 在循环中,尝试operator>> int默认为 0 ,如果失败,in.clear()并使用带有charoperator>>来读取似乎不是数字的内容,而是|#。根据此继续循环。

  • 在第二个项目符号点之后处理行的其余部分#


始终检查每个提取操作是否成功。

只需忽略其他输入并保存数字,检查我做了什么,它适用于您发布的同一文本文件,最后向量必须具有 0 2 2 作为值。截图

我忘了将所有其他字符设为 0,但现在这不是问题,只需替换继续; 屏幕截图中的语句为 nums.push_back(0(;

相关内容

  • 没有找到相关文章

最新更新