代码之家  ›  专栏  ›  技术社区  ›  Vickie

如何在不使用堆栈或数组的情况下从int中提取每个数字?(C++)

  •  1
  • Vickie  · 技术社区  · 7 年前

    问题是我只知道如何按相反的顺序提取数字(例如:先提取1,然后为90621提取2),我不确定如何按顺序提取。我在这里看到过一些帖子,人们将数字转换为字符串,但我不能这样做,因为我调用的函数之一将int作为参数。到目前为止,我们只讨论了循环和if函数等基础知识,所以我不确定如何使用堆栈或数组。

    string barCode(int zip){
        string result;
        int n;
        while (zip > 0){
            n = zip % 10;
            result += codeForDigit(n);
            zip = zip / 10;
        }
    
        return result;
    }
    

    有关功能的一些信息: codeForDigit(整数位) 取一个数字并返回该数字的代码。 - barCode(int zip)

    4 回复  |  直到 7 年前
        1
  •  3
  •   Discoverer98    7 年前

    一种简单的方法是通过递归。事实上,它相当优雅。你可以这样写:

    string barCode(int zip)
    {
        if (zip <= 0) return "";
        return (barCode(zip / 10) + codeForDigit(zip % 10));
    }
    

    基本上,您使用调用堆栈作为存储先前字符串的堆栈。这也是编写这个函数的一种最简单的方法。

        2
  •  1
  •   Raindrop7    7 年前

    在将每个数字转换为字符后,可以反转字符串结果:

    std::string barCode(int zip){
        std::string result;
        while(zip > 0){
            result += zip % 10 + '0';
            zip /= 10;
        }
    
        std::reverse(result.begin(), result.end());     
        return result;
    }
    
    
    int main(){
        std::cout << barCode(245) << std::endl;
    
        return 0;
    }
    
        3
  •  0
  •   MKR    7 年前

    一种解决方案可以是:

    string barCode(int zip)
    {
        string result;
        if(zip <=0) return "";
    
        //Find 10s in zip
        int i=zip/10;
    
        int nTens = 0;
        while( i<=0)
        {
            i = i/10;
            nTens++;
        }
    
        int n;
        for (int j=0; j<=nTens ; j++)
        {
            n = zip / pow(10, (nTens-j));
            result += codeForDigit(n);
            zip = zip - n * pow(10, (nTens-j))
        }
        return result;
    }
    
        4
  •  0
  •   Eduardo Claudio    7 年前

    int zip = 123456789;
    std::string digits = std::to_string(zip);
    std::string barcode;
    int d=0;
    
    for (auto it=digits.begin(); it != digits.end();it++)
    {
        d= int(*it);
        barcode.push_back(codeForDigit(d-'0'));
    }