是否可以在int中存储前导零?

时间:2012-10-17 19:58:39

标签: c++

我有一个编程任务,我需要加密4位int,由用户输入。我已将int拆分为四个单独的值,加密和解密函数可以工作。我的问题是当我将四个单独的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;
    }

我的目标是返回连接(使用前导零)而不是仅仅在函数中打印它。

5 个答案:

答案 0 :(得分:4)

这样做:

#include <iomanip>
#include <iostream>

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

答案 1 :(得分:4)

int包含一个数字。它不包含任何特定的表示信息,例如它是从包含一个前导零或两个的文本输入,还是以十六进制,八进制或鸡爪划痕,或者即使是通过添加一组数字来计算。这只是一个价值。

如果要显示带前导零的int,则必须以这种方式显式转换:

char buf [20];
snprintf (buf, sizeof buf, "%04d", myint);  // output base 10, + leading zeros
                                           // for a field width of 4

答案 2 :(得分:3)

这应该可以解决问题。

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

为了使用这些操纵器,您需要:

#include <iomanip>

答案 3 :(得分:3)

int基本上存储前导零。您遇到的问题是您没有打印那里的前导零。

另一种不同的方法是创建一个函数,它将接受四个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;
}

然后在需要打印值的地方,您可以使用参数和提供的字符缓冲区调用函数,然后只打印字符缓冲区。

使用这种方法,如果你有一些不合理的数字,最终有多个前导零,你将得到所有的零。

或者你可能希望有一个函数将四个int合并为一个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;
}

答案 4 :(得分:1)

C ++将int存储为二进制数。但是所有IO都是字符串。因此,要显示int,必须有从int到字符串的转换。在转换过程中,您可以从显示的数字设置。为此,请使用流操纵器setwsetfill