[英]Comparing strings to string produced by ifstream::getline
我正在一個項目中,我需要閱讀后記並從文件中解析數據以在程序中使用。 我正在開發一個函數,以通過確保它具有打開和關閉定界符來測試后記是否有效。
以下是我為實現此目的而編寫的代碼段。 我相信在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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.