C++ 如何在C++;

C++ 如何在C++;,c++,C++,我知道在堆栈溢出方面也有类似的问题。我已经检查过了。这里有两点: 这个数字是用户输入的,所以我不知道这个数字可能包含多少位数字 我不想直接打印数字,我需要对每个数字做进一步的处理,所以我需要一种保存或分配每个数字的方法。 例如,如果用户输入1027,我需要返回1,0,2,7,并且不打印。这就是我的问题开始的地方。 如果可以打印,我会这样写: intx; cin>>x; 而(x!=0) { cout这取决于您需要它的顺序。如果您需要从最低有效位(最右边)到最高有效位(最左边),那么您的解决方案

我知道在堆栈溢出方面也有类似的问题。我已经检查过了。这里有两点:

  • 这个数字是用户输入的,所以我不知道这个数字可能包含多少位数字

  • 我不想直接打印数字,我需要对每个数字做进一步的处理,所以我需要一种保存或分配每个数字的方法。 例如,如果用户输入1027,我需要返回1,0,2,7,并且不打印。这就是我的问题开始的地方。 如果可以打印,我会这样写:

  • intx;
    cin>>x;
    而(x!=0)
    {
    
    cout这取决于您需要它的顺序。如果您需要从最低有效位(最右边)到最高有效位(最左边),那么您的解决方案就差不多了

    intx=。。。
    而(x!=0)
    {
    int current=x%10;//获取最右边的数字
    x/=10;
    //处理“当前”,或存储在容器中以供以后处理
    }
    
    如果需要从最重要(最左边)到最不重要(最右边),则可以递归执行此操作:

    void表示每个数字(整数输入)
    {
    //递归基本情况
    如果(输入==0){return;};
    int电流=输入%10
    对于每个数字(输入/10);//首先递归*然后处理
    //处理“当前”,添加到容器等
    }
    // ...
    INTX=。。。
    对于每一个数字(x);
    
    编辑:我显然错过了关于返回数字序列的部分


    这两种方法都有效。如果从右向左,则需要先反转容器。如果使用递归,则需要将每个值附加到容器中。

    使用
    std::string

    std::string input;
    std::cin >> input;
    

    现在
    input[i]
    i
    -第位。
    input.size()
    是位数。

    您可以使用vector。它可以进行可变长度的输入。您无需事先声明大小。在此处了解有关vector的更多信息:

    #包括
    #包括
    #include//std::reverse
    使用名称空间std;
    内部主(空)
    {
    矢量数字;
    int x;
    cin>>x;
    while(x)
    {
    数字。推回(x%10);
    x=x/10;
    }
    //反转向量“数字”中元素的顺序,因为它们从最后一个收集到第一个,我们希望它们从第一个收集到最后一个。
    反向(digits.begin(),digits.end());
    //现在,向量“digits”包含给定数字的数字。您可以使用向量的索引访问向量的元素,就像访问数组元素一样。
    
    对于(int i=0;istd::vector
    存储未知数量的整数,如图所示:

    #include <iostream>
    #include <vector>
    
    int main(void) {
        std::vector<int> digits;
        std::string s;
    
        std::cout << "Enter the number: ";
        std::cin >> s;
    
        size_t len = s.length();
    
        for (size_t i = 0; i < len; i++) {
            digits.push_back(s[i] - '0');
        }
        
        // Comment next 3 code to stop getting output
        for (size_t i = 0; i < len; i++)
            std::cout << digits[i] << ' ';
        std::cout << std::endl;
    
        return 0;
    }
    
    #包括
    #包括
    内部主(空){
    向量数字;
    std::字符串s;
    std::cout>s;
    尺寸长度=s.长度();
    对于(大小i=0;istd::cout所以您希望这些数字存储在某种容器中的某个地方。您熟悉容器吗?您希望存储每个数字(而数字的数量未知)?
    std::string s;std::cin>>s;
    ?(可能检查输入)@Beta是的,我想要存储它们。我不确定你说的容器是什么意思,我想做的是将它们存储在一个数组中,这听起来像是一种努力。I@RohanBari不,我还需要知道数字是多少。如果这是一个面试问题,这个答案不会通过面试。因此,这不是一个特别好的建议离子,因为它没有证明所需的算法知识,以得出一个好的结果solution@Human-那么我不想要这个job@Human-说真的,如果他们想让我展示我对算法的知识,他们应该告诉我。如果他们要求我提供一种从用户输入的数字中获取数字的方法,那么就是这样。有o顺便说一句,在问题中提到采访。无论如何,我很高兴在采访中发现我们没有匹配,而且不仅仅是后来,我的评论并不是为了煽动任何事情。@Human Compiler好吧,那很容易是从
    std::string
    std:vector
    的转换。所以你可以在支持中演示osed访谈,您了解容器和算法;)。稍加编辑会使其更好。与其全局存储向量,不如将其放入主函数中,将可见性范围更改为本地。不要忘记定义
    (void)
    ,并显式返回0。@RohanBari
    (void)在C++中是不必要的和毫无意义的。此外,主()>代码>得到一个隐含的<代码>返回0;< /C> >尽管我更喜欢显式地写它。为什么你麻烦复制到一个新的原始字符数组中,然后读取它?<代码> STD::String < /Cord>有<代码> .No..(代码)> />代码>(因此适用于范围-
    for
    )、
    运算符[]
    .data()
    ,等等。建议使用
    新的
    ,这是不好的。最终用户几乎不必编写
    新的
    删除
    。此外,在这种情况下,这是完全不必要的。@下划线d您说得很对。答案已更新。
    #include <iostream>
    #include <vector>
    
    int main(void) {
        std::vector<int> digits;
        std::string s;
    
        std::cout << "Enter the number: ";
        std::cin >> s;
    
        size_t len = s.length();
    
        for (size_t i = 0; i < len; i++) {
            digits.push_back(s[i] - '0');
        }
        
        // Comment next 3 code to stop getting output
        for (size_t i = 0; i < len; i++)
            std::cout << digits[i] << ' ';
        std::cout << std::endl;
    
        return 0;
    }