C ++将“字符串”与数组中的对象进行比较

时间:2018-09-25 13:10:36

标签: c++ string

我想知道为什么运算符||当我将'input'与数组的元素进行比较时不起作用... AND(&&)起作用,但这意味着我的输入必须等于表中的每个元素(否则,-我不明白)。与||运算符,我总是得到结果“ 0”

#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;

int main()
{
    string days[7] = { "sr","czw","pt","sob","nd","pon","wt" };
    string day;
    cin >> day;

    if (day != (days[0]) || day != days[1] || day != days[2] || day != days[3] || day != days[4] || day != days[5] || day != days[6])
    {
        cout << "0";
    }
    else
    {
        cout << "1";
    }
}

2 个答案:

答案 0 :(得分:1)

要显示1,变量day应该同时为7个不同的值。由于这是不可能的,因此您总是看到0

作为一般规则(不严格),进行匹配(||时应使用==而不是不匹配(!=)。

答案 1 :(得分:0)

不清楚要实现什么,因为程序的逻辑完全被搞乱了。

如果您编写如下代码:

if(day != (days[0]) || day != days[1] || day != days[2] || day != days[3] || day != days[4] || day != days[5] || day != days[6])
{
cout<<"0";
}
else
{
cout<<"1";
}

它将始终执行IF的True分支,在这种情况下为cout<<"0";

因为False || True = True和您的七个条件中的六个始终为真。

您需要阅读并记住De Morgan's laws,以便以后使用程序


因此,有 个以上解决方案可以解决

它们可能是:

1。。如果是多个条件,则在另一个条件内:

if(day != (days[0]){
    if(day != (days[1]){
        if(day != (days[0]){
            //and so on ...
        }
        else{
            cout<<"1";
        }  
    }
    else{
        cout<<"1";
    }  
}
else{
    cout<<"1";
} 

但这不干净,很难阅读,我不喜欢...


2。。您可以创建一个递归函数来检查day值的匹配情况。

我们可以将函数声明为void,因为我们不需要任何返回值。

void dayCheckMatching(string days[], string day, int counter)
{
    if(day != (days[counter]){
        dayCheckMatching(days, day, counter)
    }
    else{
        cout<<"Day "<<day<<" matched at index: "<<counter;
        return;
    }
}

,然后调用它而不是它的主要内容中的长if condition

int main()
{

    string days[7] = {"sr","czw","pt","sob","nd","pon","wt"};
    string day;
    cin>>day;
    dayCheckMatching(days, day, 0)
    return 0;
}

备注:

在void函数示例中可以看到,我们使用return;语句来在daydays[index]值匹配时退出函数。即使函数为return,也可以随时使用void退出函数。