否则如果字符串比较问题

时间:2010-07-14 20:27:05

标签: c++

我有以下if语句,其中两个似乎不起作用。当我尝试将它与单个字符“y”或“n”进行比较时,我不明白为什么它有用,但当我尝试将它与另一个if语句中的两个字符进行比较时,我不明白。

我的最后一个问题是,如果有更好的清洁方式来写这个或者这是否可以接受简单的提示检查?

getline(cin,somestr);

if(somestr.empty()){
//do this
}
else if (somestr == "y" || "Y"){
//do something else
}
else if (somestr == "n" || "N"){
//do something else
}
else{}

7 个答案:

答案 0 :(得分:9)

你会这样做:

else if(somestr == "y" || somestr == "Y")

答案 1 :(得分:7)

if (somestr == "y" || "Y"){

请记住,在C ++中0是假的,其他一切都是真的。由于"Y"不为零,所以这是真的。所以你真正写的是:if (something || true)。这总是如此。

答案 2 :(得分:6)

不幸的是,该语言并没有为您提供一种根据一系列可能性检查变量的简便方法。您必须单独执行每个测试或使用switch语句。因此,以下任一代码示例都是您问题的有效解决方案:

else if (somestr == 'y' || somestr == 'Y'){
//do something else
}
else if (somestr == 'n' || somestr == 'N'){
//do something else
}


switch (somestr) {
    case 'y':
    case 'Y':
        // do something
        break;

    case 'n':
    case 'N':
        // do something
        break;

    default:
        break;
}

或者,您可以通过减少一些逻辑来清理代码(假设somestrchar):

// Convert to uppercase first and only one comparison is needed
else if (toupper(somestr) == 'Y'){
//do something else
}
else if (toupper(somestr) == 'N'){
//do something else
}

答案 3 :(得分:1)

我会做像

这样的事情
else if(someFunctionThatConvertsToUpper(somestr) == "Y")

答案 4 :(得分:1)

Anther选项,特别是如果你只是期望字符 - 它看起来像是或否为是或否 - 是读取字符,而不是字符串,并使用switch语句。

char somechar;
cin.get(somechar);

switch(somechar){
  case 'y' : case 'Y':
    //do something
  break;
  case 'n' : case 'N':
    // do something else
    // break;
  default:
    // do something else
}

答案 5 :(得分:0)

你应该写两个比较

somestr == "n" ||  somestr=="N"

答案 6 :(得分:0)

首先,你需要解决这个问题:

(somestr == "y" || "Y")  to (somestr == "y" || somestr == "Y")

(somestr == "n" || "N")  to (somestr == "n" || somestr == "N")

否则,这些表达式总是求值为true,因为任何字符串本身(如“y”)的计算结果为true以及除0以外的任何其他值。

其次,如果不是“y”,“Y”,“n”或“N”,您可能想再次询问输入。您可以使用do-while循环来完成此任务。