2017-09-20 1 views
1

私は90621のような数字が入力されたときに特定のコードを印刷することを想定しています。その番号を順番に抽出してコードを印刷すると仮定します。ex:extract digit 9 print code - > 0を(順番に)抽出します。スタックや配列を使わずにintから各桁を抽出する方法は? (C++)

私は逆の順序で数字を抽出する方法(例えば、最初に1を抽出してから2を90621に抽出する方法)しか考えていません。順番にそれを行う方法がわかりません。私は人々が数字を文字列に変換するここでいくつかのポストを見てきましたが、私が呼び出す関数の1つがパラメータとして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(int型の数字)が一桁を取り、コードを返しますその桁の - barCode(int zip)数字を個々の数字に分割し、その数字をエンコードし、それを文字列の戻り値に追加することによって、バーコード全体を返します。

+2

再帰を終了しましたか?反復+スタック==再帰。 – NathanOliver

+0

基本的な再帰を行ってきましたが、数値をスタックにプッシュする方法はわかりません。 – Vickie

+2

[ここ](http://coliru.stacked-crooked.com/a/2df9da8fc9cba815)は、あなたが "後方へ"行く方法の少しの例です。 – NathanOliver

答えて

3

簡単な方法の1つは、再帰によるものです。実際、それは非常にエレガントです。

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

基本的に、前の文字列を格納するスタックとしてコールスタックを使用しています。また、この関数を書くための最小限の方法です。

1

あなたは各桁をcharに変換して終わった後には、文字列の結果を逆にすることができます:

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

一つの解決策は次のようになります。

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

私は簡単な方法は、番号を変換だと思います文字列で繰り返して繰り返します:

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')); 
} 
関連する問題