我有一个编程任务,我需要加密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;
}
我的目标是返回连接(使用前导零)而不是仅仅在函数中打印它。
答案 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
到字符串的转换。在转换过程中,您可以从显示的数字设置。为此,请使用流操纵器setw
和setfill
。