我想从文件中提取一个特定的数字,该文件包含如下所示的行(行继续,这是唯一重要的部分):
"https://stackoverflow.com/questions/ask?wizard=1";
我必须忽略的地方,直到找到带有f.ignore(MAX_LONG_LINE, '\n')
的字符'='。但是,要在网址中获取数字1(可以是任何数字),我不知道该怎么做。
我尝试使用getline(f, num, '"')
,但是它不支持整数,并且从字符串到int的转换对于我正在学习的内容和所学的课程来说太高级了。必须有一个更简单的方法。之后,我尝试使用f >> num
,但是跳过直到下一个空格而不是'“'。
num 应该导致文件中'='和'“'之间的数字,在示例中为1,但可以不同。
预先感谢
答案 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
是整数,它将提取相同类型的值。
非常感谢所有帮助我的人。