2014-02-28 84 views
0

我有一個問題,我根本找不到!錯誤的字符串比較

在我的程序中,用戶輸入要排序的數字。我必須能夠對無窮大,負無窮和所謂的「無效」進行排序(這些是我在程序早期定義的)

如果用戶想要輸入無窮大,例如他們必須在字符串中輸入「Pinf」 。

我的問題是我將用戶輸入存儲在std :: string中,然後檢查字符串是「pinf」還是「Pinf」,即使我輸入了數字3以使字符串爲「3」進入if語句,我做錯了什麼?!

我的代碼如下;

string Temp; 
    cin>> Temp; 
    if (Temp.find("Pinf")||Temp.find("pinf")) { 
     Num = Pinfinity; 
    } 

它認爲if語句每次都是真的。

+1

您正在使用位'更改|'操盤邏輯的''||操作。 – Netwave

+0

你的意思是'||'而不是'|'嗎?如果單詞首先作爲句子的一部分出現,則邏輯不正確。 – Mahesh

+0

除了不正確的操作符,[閱讀文檔](http://en.cppreference.com/w/cpp/string/basic_string/find)。 – chris

回答

1

如果你只是尋找PINF或PINF那麼你可以使用這個。請注意邏輯或運算符是||

if (Temp == "Pinf" || Temp == "pinf") { 
0

|是一個按位或運算符。使用||代替|

if (Temp.find("Pinf") != npos || Temp.find("pinf") != npos) 
+0

對不起我的壞...將編輯.. – HadeS

+0

@Mahesh,因爲如果找不到字符串'find ()'將返回不爲零的npos。 – HadeS

+0

@Mahesh'if'總是執行負值...我認爲你錯過了一些東西..'if'在零/假時破裂.. – HadeS

2

。錯誤 - 你正在使用|代替||

2.Error - find返回

第一個匹配的第一個字符的位置。如果找不到匹配 ,則函數返回string :: npos。 你應該

if (Temp.find("Pinf")|Temp.find("pinf")) { 

if ((Temp.find("Pinf") != string::npos) || (Temp.find("pinf") != string::npos)) { 
+0

這確實有效,但它對我的簡單需求來說太過於矯枉過正了,字符串是「Pinf」或「pinf」,但我給你的答案加1。感謝你的回答 – JabbaWook