我正在一个项目中,我需要阅读后记并从文件中解析数据以在程序中使用。我正在开发一个函数,以通过确保它具有打开和关闭定界符来测试后记是否有效。

以下是我为实现此目的而编写的代码段。我相信在postscript文件中没有其他空格或任何类似的东西会引起delimitStr和lineStr之间的任何差异。我还尝试将delimitStr设置为“%%% BEGIN \ 0”和“%%% BEGIN”,但是比较从未成功。

string lineStr;
bool beginFlag = false; //Switches to true when begin statement in postscript is found
string delimitStr = "%%%BEGIN"; //Starts as opening  delimiter. Switches to closing when opening is found.
while(psfile) {
    getline(psfile, lineStr);
    if(!beginFlag && lineStr == delimitStr) {
        beginFlag = true;
        delimitStr = "%%%END";
        cerr << "Begin found." << endl;
    }
    else if(beginFlag && lineStr == delimitStr)
        return true; //Only return true if file has beginning and ending delimiters.

任何帮助将不胜感激。

最佳答案

delimitStr更改为delimitStr = "%%%BEGIN";,因为getline放弃了'\n'
比较类似lineStr == delimitStr的字符串。
不要将字符串与c_str()进行比较,因为这会返回const char*

显示差异的示例:

std::string s1("%%%BEGIN");
std::string s2("%%%BEGIN\n");
std::string s3("%%%BEGIN\0"); // Same as s1 because std::string stops at '\0'

std::cout << std::boolalpha << (s1 == s2) << '\n';      // Outputs: false
std::cout << (s1 == s3) << '\n';      // Outputs: true
std::cout << (s2 == s3) << std::endl; // Outputs: false

10-07 17:02