2014-11-04 70 views
-1

我正在閱讀一個文本文件,然後將文件的第一行(即「abc」)與字符串「abc」進行比較,但他們的評估結果並不相等,儘管我的日誌聲明顯示它們是相同的。 (這是輸出abc!= abc)來自istringstream的字符串getline不比較正確

我注意到的是,如果我只讓我的文本文件只有一行,那麼它就會評估它們是否相等。

我試過的東西,如使用strcmp或比較函數,但我得到了相同的結果。我也嘗試過讓我的字符串與「abc \ n」比較,那也沒用。

這裏是我的代碼:

string testString = FileUtils::getInstance()->getStringFromFile("test.txt"); 
istringstream ss(testString); 
string s; 
string s2 = "abc"; 

getline(ss, s, '\n'); 

if(s == s2){ 
    CCLOG("%s","we are good..."); 
} 
else{ 
    CCLOG("%s!=%s", s.c_str(), s2.c_str()); 
} 
+1

你是不是要寫''\ n''?我可以想象,當前的代碼形式讀取整個文件(或無法編譯)。 – 2014-11-04 03:00:53

+0

是的,對不起,我的代碼有\ n not/n – MikeC 2014-11-04 03:03:26

+0

有可能文本包含一個「不可見」字符,例如''\ r''?您可能希望打印讀取字符串的大小,並使用每個字符的數字值單獨打印字符,或者至少爲非圖形字符打印字符。 – 2014-11-04 03:07:47

回答

1

請注意,我的字符串包含 「看不見」 的字符。值得注意的是,一些系統使用線端序列代表線的末端,例如"\r\n"序列。如果是這種情況,字符串可能看起來一樣,但也包含回車符。你可以檢查一下打印字符串,像這樣:

std::copy(s.begin(), s.end(), std::ostream_iterator<int>(std::cout, " ")); 

如果有一個回車,你會得到像

97 98 99 13 

的有點混亂的方面是,你說你看到的輸出是

abc=abc 

我會想到它是

=abc 

作爲輸出將是

abc\r=abc 

'\r'應在該行的開始重新定位光標。除非你的CCLOG()最終刪除回車符。