说,检查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";
}
}
对不起,我很抱歉,我知道这样做非常糟糕。我正在自学(本月刚刚开始),我尝试使用谷歌搜索,但我找不到任何解决方案。
答案 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;
}
这可能是一种方法。但正如我所说,并非百分百肯定。