簡體   English   中英

將字符串與ifstream :: getline生成的字符串進行比較

[英]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.

任何幫助將不勝感激。

改變delimitStrdelimitStr = "%%%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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM