从文件中读取c ++不起作用

时间:2016-03-09 01:25:48

标签: c++ ifstream getline

我试图从文件中读取,基本上我的文本文件是这样的;

23 4 * 19 2 - + #
6 3 -  #
36 #

我试图通过忽略文件末尾的#来从文件中读取它们。我不想接受#。在那之后,我想将它存储在我的队列中。这是我的代码的一部分,就像这样;当我显示我的队列时,它仍然需要#。我无法弄清楚为什么。如果你帮助我,我会很高兴

while (!myFile.eof()) {
        getline(myFile, a, ' ');
        if (a != str4) {
            q.enqueue(a);
        }
        else {
            cout << " " << endl;
        }
    }
    q.display(cout);

2 个答案:

答案 0 :(得分:0)

一种简单的方法是将文本行读入字符串。接下来找到#符号并删除#后字符串中的所有字符。

std::string test_string = "help fred # not fred.\n";
const std::string::size_type position = test_string.find_first("#");
test_string.erase(position, test_string.length() - position);
std::cout << "After truncation, string is: " << test_string << "\n";

答案 1 :(得分:-1)

您可以使用正则表达式清理数据:

    std::smatch _match;
    std::regex line_regex("(.*)#");

    string line;

    while(getline(myfile,line))
    {
        std::regex_search(line, _match, line_regex);
        if (_match.size() > 0)
        {
            cout << _match[1].str() + "\n";
        }
    }

正则表达式会在#之后忽略任何内容。根据文件的示例内容,输出将是

  

输入内容:

23 4 * 19 2 - + #
6 3 -  # 23244
36 #
  

输出:

23 4 * 19 2 - + 
6 3 -  
36