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

How do I check if an integer contains digit 0 and 1 or not?

本文关键字:数字 包含 是否 整数 何检查 检查      更新时间:2023-10-16

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

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

我尝试:除以我的整数的 10,如果不是,则用于 cin.clear 和 cin.ignore 只要整数中有数字 0 或 1。

但它不起作用。

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";
        }

    }

啊,我很抱歉,我知道这做得很糟糕。我正在自己学习(本月刚开始),我尝试过谷歌搜索,但我找不到任何解决方案。

转换为字符串将是最简单的解决方案,尽管在计算上不是最有效的:

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

请尝试以下代码。

#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;
        }

假设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;
}

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

此答案基于您使用的代码

使用这个:(根据您使用的代码)

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);

假设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

您可以通过多种方式进行检查。这是我要做的:

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

我认为您可能最简单的方法是转换为字符串并使用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 位于数字中间,则它有效。

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;
}

还没有测试过这个。

我不是 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;
}

这将是一种可能的方法。但正如我所说,不是100%确定。