如何检查整数是否包含数字0和1?

时间:2017-10-16 11:52:13

标签: c++ if-statement

说,检查4位整数。 如何检查它是否包含0或1?

使用数字1234,它包含1.因此我不得不拒绝。 使用数字1023,它包含0.因此我必须拒绝。 但对于数字2345,它不包含0或1,所以它不被拒绝。我该如何从那里开始?

我试过: 除以我的整数10, if else使用,只要数字0或1在整数中,就用cin.clear和cin.ignore。

但它不起作用。

cout << "Enter a positive integer: ";
cin >> number;

int outputcounter =4;
while(outputcounter!=0)
{
    lastDigit=number%10;
    number=number/10;

    while ( number > 1 )
    {

        if ((lastDigit = 1 )|| (lastDigit = 0 ))
        {
            cin.clear ();
            cin.ignore (100, '\n');
        }
        else
        {
            cout << " xx";

        }


    }
对不起,我很抱歉,我知道这样做非常糟糕。我正在自学(本月刚刚开始),我尝试使用谷歌搜索,但我找不到任何解决方案。

9 个答案:

答案 0 :(得分:3)

转换为字符串将是最简单的解决方案,但计算效率不是最高的:

int number;
...
std::string number_str = std::to_string(number);
if (number_str.find_first_of("01") != std::string::npos) {
    // reject the number
}

答案 1 :(得分:2)

尝试以下代码。

#include <iostream>
    using namespace std;
    int main()
            {
            int number;
            cout << "Enter a positive integer: ";
           cin >> number;
            int flag = 0;
           while(number != 0){
               int temp = number % 10;
               number = number/10;
                if(temp == 1 || temp == 0){
                    cout<<"rejected";
                    flag = 1;
                }
            }
            if(flag == 0){
                cout<<"Accepted";
            }
            return 0;
        }

答案 2 :(得分:1)

Say i包含要检查的整数。返回值1表示包含1或0。零值表示您的数字不包含零或一。我假设i为正(或零)。

int checkHasOneOrZero(int i)
{
    int j;

    if (i == 0) return 1; /* i == 0000 */

    while (i > 0) {
        j = i % 10;
        if (j == 0 || j == 1) return 1;
        i = i / 10;
    }

    return 0;
}

编辑:由于亚瑟的合理评论而交换了返回值

答案 3 :(得分:1)

  

此答案基于您使用的代码

使用此功能(根据您使用过的代码)

cout << "Enter a positive integer: ";
cin >> number;

int outputcounter =4;
while(outputcounter!=0)
{
    if(number%10==0 || number%10==1)
    {
       cout<<"the number contains 0/1"; 
       break;
    }
    number=number/10; 
        outputcounter--;
}

对于可变长度的数字:

cout << "Enter a positive integer: ";
cin >> number;

do 
{
    int mod = number%10;
    if(mod==0 || mod==1)
    {
       cout<<"the number contains 0/1"; 
       break;
    }
    number=number/10;
}while(number!=0);

答案 4 :(得分:0)

假设x是你的整数。

int n= x;
bool has_zero_one = n==0 || n==1;
while(n> 0){
int reminder = n%10;
if(remainder ==0 || remainder ==1) {
has_zero_one = true;
break;
}
n= n/10;
}
if(has_zero_one) cout<< "Yes"<<endl;
else cout<<"No"<<endl

答案 5 :(得分:0)

你可以检查很多时尚。这就是我要做的事情:

 int a=02345;
    while(a)
    {
        if(a%10==0 || a%10==1)
        {cout<<"the number contains 0/1"; break;}
        a/=10;
    }

答案 6 :(得分:0)

bool containsOneOrZero(unsigned int number) {
    if (number == 0) return false; // because "0", you know...
    while (number > 0) {
        auto rem = number % 10;
        number = (int) (number / 10);
        if (rem == 0 || rem == 1) return false;
    }
    return true;
}

Haven没有测试过这个。

答案 7 :(得分:0)

我认为最简单的方法可能是转换为字符串并使用std::string::find。请看下面的例子:

#include <iostream>                                                                                                                                                                                                                
#include <sstream>
#include <stdlib.h>

int main(int argc, char** argv)
{
    for (int i = 1;i<argc;i++){
        int number = atoi(argv[i]);
        std::string str;
        std::ostringstream oss;
        oss<<number;
        str = oss.str();
        std::cout<<"number "<<number;
        if (str.find("0") != std::string::npos)
            std::cout<<" contains 0"<<std::endl;
        else
            std::cout<<" does not contain 0"<<std::endl;
    }
    return 0;
}

请注意,如果输入0123,则无效,因为在转换中(使用atoi)将删除前导0。但是,如果0位于数字的中间,则可以正常工作。

答案 8 :(得分:-1)

我对此并不是100%肯定,但你可以把它转换为char []然后通过for循环检查每个字符,如果其中一个是0或1拒绝它们。

public bool Check(int pInput)
{
    std::string tempStr = "" + pInput;
    const char* tempChr = tempStr.c_str();

    boolean ret = true;
    for(int i = 0; i < tempStr.length; i++)
    {
        if(tempChr[i] == "0" || tempChr[i] == 1)
        {
            ret = true;
        }
    }
    return ret;
}

这可能是一种方法。但正如我所说,并非百分百肯定。