如何从两个字符之间的文件中提取整数?

时间:2018-12-25 11:17:56

标签: c++

我想从文件中提取一个特定的数字,该文件包含如下所示的行(行继续,这是唯一重要的部分):

"https://stackoverflow.com/questions/ask?wizard=1";

我必须忽略的地方,直到找到带有f.ignore(MAX_LONG_LINE, '\n')的字符'='。但是,要在网址中获取数字1(可以是任何数字),我不知道该怎么做。

我尝试使用getline(f, num, '"'),但是它不支持整数,并且从字符串到int的转换对于我正在学习的内容和所学的课程来说太高级了。必须有一个更简单的方法。之后,我尝试使用f >> num,但是跳过直到下一个空格而不是'“'。

num 应该导致文件中'='和'“'之间的数字,在示例中为1,但可以不同。

预先感谢

2 个答案:

答案 0 :(得分:1)

可以是:

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>

using namespace std;

int main(int argc, char ** argv)
{
  if (argc != 2) {
    cout << "usage : " << argv[0] << " <file path>" << endl;
    return -1;
  }

  ifstream in(argv[1]);

  if (!in) {
    cout << "cannot open "  << argv[1] << endl;
    return -1;
  }

  string line;

  in >> line;

  size_t p = line.rfind('=');

  if (p == string::npos) {
    cout << "invalid line '"  << line << "',  = is missing" << endl;
    return -1;
  }

  stringstream ss(line.substr(p + 1));
  int n;
  string s;

  ss >> n >> s;

  if (s != "\";") {
    cout << "invalid line '"  << line << "',  must be ...<number>\";'" << endl;
    return -1;
  }

  cout << "number is " << n << endl;

  return 0;
}

答案 1 :(得分:0)

我最终自己解决了这个问题:

结果证明f >> num确实可行,我只需要再添加一个忽略即可,因为它获取的是前一个数字。如果您对此有疑问,建议您先检查f.ignore(MAX_LONG_LINE, '\n')或类似方法的位置,然后再进行其他操作。只要num是整数,它将提取相同类型的值。

非常感谢所有帮助我的人。