我有一个非常简单的任务:从文件中读取方程式,然后在其他算法中使用它。我需要检查文件包含的等式是否正确,所以我使用正则表达式。正则表达式代表文件中的整个字符串,这就是我使用regex_match的原因。但我一直得到错误的结果。例如,我的文件中有((4563722- 5764545 ) * ( 657457 + 75477) -647586 )+ 748785 /5
,它与正则表达式不匹配。我搜索了很多关于我的问题,但没有建议的解决方案适合我。
我在Windows上使用最新版本Qt creator和mingw32。提前谢谢。
#include <QCoreApplication>
#include<iostream>
#include<fstream>
#include<string>
#include<stdio.h>
#include<regex>
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
ifstream FILE;
string filename, equation, check;
const regex distr(("\\s*\\(*\\s*[123456789]\\d*\\s*\\)*(\\s*[\\+\\-\\*\\/]\\s*\\(*\\s*[123456789]\\d*\\s*\\)*\\s*)*"), std::regex_constants::extended);
do{
cout << "Input name of file" << endl;
getline(cin, filename);
FILE.open(filename.c_str());
if (!FILE.is_open())
cout << "Error. Cannot open file" << endl;
else{
getline(FILE, check);
if(FILE.eof() && check.empty()){
cout << "Error. File is empty" << endl;
FILE.close();
}
}
}while((!FILE.is_open())||(check.empty()));
FILE.close();
FILE.open(filename.c_str());
getline(FILE, equation);
cout << equation << endl;
FILE.close();
if (regex_match(equation, distr))
cout << "True" << endl;
else
cout << "False" << endl;
return a.exec();
}