5

ユーザーが入力した 4 桁の int を暗号化する必要があるプログラミングの割り当てがあります。int を 4 つの個別の値に分割し、暗号化関数と復号化関数が機能します。私の問題は、4 つの個別の int をまとめて、一部の数値をゼロに暗号化し (例: in:1234 out:0189)、他の関数で使用するために出力を int に格納したい場合です。

現在、最初のintが0の場合、最初に0を出力する中途半端なソリューションがあります。

void joinInt(){
    if(int1 == 0) {cout << 0;}
    joined = int1 * 1000;
    joined += int2 * 100;
    joined += int3 * 10;
    joined += int4;
    cout << joined << endl;
    }

私の目標は、関数内で単に出力するのではなく、joined (先頭にゼロを付けて) を返すことです。

4

5 に答える 5

5

これを行う:

#include <iomanip>
#include <iostream>

std::cout << std::setfill('0') << std::setw(4) << joined << std::endl;
于 2012-10-17T20:04:34.337 に答える
4

Anintには数値が含まれます。1 つまたは 2 つの先行ゼロを含むテキストから入力されたのか、16 進数、8 進数、またはチキン スクラッチで記述されたのか、さらには多数の数値を加算して計算されたのかなど、特定の表現情報は含まれません。それは単なる値です。

int先頭にゼロを付けて を表示したい場合は、そのように明示的に変換する必要があります:

char buf [20];
snprintf (buf, sizeof buf, "%04d", myint);  // output base 10, + leading zeros
                                           // for a field width of 4
于 2012-10-17T20:05:30.143 に答える
3

int は基本的に先行ゼロを格納します。あなたが直面している問題は、そこにある先行ゼロを印刷していないことです。

もう 1 つの別の方法は、文字列と共に 4 つの int 値を受け取り、数値を含む文字列を返す関数を作成することです。

このアプローチにより、非常にまとまりがよく、副作用がなく、同様の処理が必要な場所で再利用可能なヘルパー関数が得られます。

例えば:

char *joinedIntString (char *pBuff, int int1, int int2, int int3, int int4)
{
    pBuff[0] = (int1 % 10) + '0';
    pBuff[1] = (int2 % 10) + '0';
    pBuff[2] = (int3 % 10) + '0';
    pBuff[3] = (int4 % 10) + '0';
    pBuff[4] = 0;                    // end of string needed.
    return pBuff;
}

次に、値を出力する必要がある場所で、引数と提供された文字バッファーを使用して関数を呼び出し、文字バッファーを出力するだけです。

このアプローチでは、複数の先行ゼロを持つ不合理な数値がある場合、すべてのゼロを取得します。

または、4 つの int を 1 つの int に結合する関数と、結合された int を先行ゼロと共に出力する別の関数が必要な場合があります。

int createJoinedInt (int int1, int int2, int int3, int int4)
{
    return (int1 % 10) * 1000 + (int2 % 10) * 100 + (int 3 % 10) * 10 + (int4 % 10);
}

char *joinedIntString (char *pBuff, int joinedInt)
{
    pBuff[0] = ((joinedInt / 1000) % 10) + '0';
    pBuff[1] = ((joinedInt / 100) % 10) + '0';
    pBuff[2] = ((joinedInt / 10) % 10) + '0';
    pBuff[3] = (joinedInt % 10) + '0';
    pBuff[4] = 0;                    // end of string needed.
    return pBuff;
}
于 2012-10-17T20:32:42.997 に答える
3

これでうまくいくはずです。

cout << setw(4) << setfill('0') << joined << endl;

これらのマニピュレータを使用するには、次のことを行う必要があります。

#include <iomanip>
于 2012-10-17T20:03:49.660 に答える
1

C++intは 2 進数として格納されます。ただし、すべての IO は文字列です。したがって、 を表示するには、から文字列へintの変換が必要です。int表示された数値から設定できるのは変換処理中です。この目的のために、ストリーム マニピュレータsetwとを使用します。setfill

于 2012-10-17T20:05:28.890 に答える