我正在一个项目中,我需要阅读后记并从文件中解析数据以在程序中使用。我正在开发一个函数,以通过确保它具有打开和关闭定界符来测试后记是否有效。
以下是我为实现此目的而编写的代码段。我相信在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