Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何检查数字0到9在C+中的数字流中是否至少出现过一次+;?_C++_Bit Manipulation - Fatal编程技术网

C++ 如何检查数字0到9在C+中的数字流中是否至少出现过一次+;?

C++ 如何检查数字0到9在C+中的数字流中是否至少出现过一次+;?,c++,bit-manipulation,C++,Bit Manipulation,有一个传入数字流(在基数10中,可以是任何具有“n”位的数字,比如该流可以是123、86704835134、50243) 我必须检查在读取整个流之后是否出现了所有数字0到9 例如,如果流是123、8、670、48351934、50243,则答案为“真”(从0到9,数字至少出现过一次) 如果流是123、8、670、4835134、50243,,则答案为“FALSE”,因为流中的任何数字中都没有出现9 修正-1 我想我可以从0到9取或并拥有它(allORresult) 计算流中所有数字的或(stre

有一个传入数字流(在基数10中,可以是任何具有“n”位的数字,比如该流可以是123、86704835134、50243)

我必须检查在读取整个流之后是否出现了所有数字0到9

例如,如果流是
123、8、670、48351934、50243,
则答案为“真”(从0到9,数字至少出现过一次)

如果流是
123、8、670、4835134、50243,
,则答案为“FALSE”,因为流中的任何数字中都没有出现9

修正-1 我想我可以从0到9取或并拥有它(allORresult) 计算流中所有数字的或(streamORresult) 如果allORresult和streamORresult的设置位相似,那么我们可以得出所有数字的结论,0到9在流的数字中至少出现过一次

修正-2
采取天真的方法!分解从一位数开始的数字(%10然后/10),并为每个数字设置一个标志。如果遇到所有数字,则返回TRUE

位操作不会帮助您解决此问题:

decimal      binary          
  123       0111 1011               
    2       0000 0010
   OR       0111 1011 
您必须将数字转换为字符串(或将其保留为字符串)并处理代表数字的字符,或者必须使用
%10
进行迭代以获取最后一个数字,并使用
/10
处理下一个数字


我让你自己带着这个提示完成练习

您可以扫描整个流,并对0-9中的每个数字使用标志

#包括
#包括
使用名称空间std;
int main(){
char ch;
国际旗帜[10];
做{
ch=getchar();

cout只是抛出一个可能有用的函数:

#include <iostream>
#include <vector>

using namespace std;

bool findAllDigits(istream & i){
    vector<int> digits(0);
    int tmp; char c; bool found;

    while(i >> c){//read one char
        if(isdigit(c)){//check if it is a number
            tmp = c - '0';//convert char to int
            found = false;
            for(size_t i = 0; i < digits.size(); ++i){
                if(tmp == digits[i]){
                    found = true; break;
                }
            }
            if(!found){//if this number wasn't in the vector yet
                digits.push_back(tmp);
            }
        }
    }
    return digits.size() == 10;//return true if all the digits are in the stream
}
#包括
#包括
使用名称空间std;
布尔findAllDigits(istream&i){
矢量数字(0);
int-tmp;字符c;bool-found;
而(i>>c){//读取一个字符
if(isdigit(c)){//检查它是否是一个数字
tmp=c-'0';//将字符转换为int
发现=错误;
对于(size_t i=0;i

使用stl的功能更紧凑:
#include

忘记解析整数。读取整个文件,检查每个字符,并为遇到的每个数字0-9设置一个标志。在文件末尾检查是否所有十个标志都已设置。任务完成。将数字转换为字符串,合并它们,拆分为字符,创建其
std::set
,并检查其长度th等于10。Christophe…感谢您发现位操纵不起作用。仅供参考,我已经考虑过%10和/10方法。我在问题中没有提到这一点。这真的很好。您已经捕捉到了输入来自流的事实!而且,这是一种幼稚的方法。M,我们可以在这里做得更好吗?@PrasathGovind如果您想做点什么的话更紧凑的选择第二个选项
#include <iostream>
#include <vector>

using namespace std;

bool findAllDigits(istream & i){
    vector<int> digits(0);
    int tmp; char c; bool found;

    while(i >> c){//read one char
        if(isdigit(c)){//check if it is a number
            tmp = c - '0';//convert char to int
            found = false;
            for(size_t i = 0; i < digits.size(); ++i){
                if(tmp == digits[i]){
                    found = true; break;
                }
            }
            if(!found){//if this number wasn't in the vector yet
                digits.push_back(tmp);
            }
        }
    }
    return digits.size() == 10;//return true if all the digits are in the stream
}
#include <algorithm>
bool findAllDigits(istream & i){
    vector<char> digits(0); char c;

    while(i >> c)//read one char
        if(isdigit(c) && find(digits.begin(), digits.end(), c)==digits.end())//check if it is a number and not in the vector
            digits.push_back(c);

    return digits.size() == 10;//return true if all the digits are in the stream
}