2014-02-28 82 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