谁能帮我简单的实现这个"算法"??

RichRiver 2004-08-12 08:46:24
int num = 8;
char temp[3];

itoa(num,temp,10);之后,temp的值为8
而我希望是temp的值为008

谁能帮我简单的实现这个"算法"呢??
...全文
118 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
antijpn 2004-08-12
  • 打赏
  • 举报
回复
sprintf似乎灵活性上面不是很好,进制转换就没办法进行了(只能到十进制、十六进制,八进制了)

如果数据再大一点,可以考虑超过十的进制,这样就可以保存更大一点的数字了(36进制的三位可以保存0~46655了)
RichRiver 2004-08-12
  • 打赏
  • 举报
回复
哈哈
这就是我想要的
结贴,给分
寒雪叔叔 2004-08-12
  • 打赏
  • 举报
回复
天,英雄所见,代码的相似度99.9999%,佩服stephen_wang_2000
expert2000 2004-08-12
  • 打赏
  • 举报
回复
学习,帮顶。楼主给点分我就能升级。

寒雪叔叔 2004-08-12
  • 打赏
  • 举报
回复
long num = 8;
char temp[4];
sprintf(temp, "%03d", num);
stephen_wang_2000 2004-08-12
  • 打赏
  • 举报
回复
int num = 8;
char temp[4];
sprintf(temp,"%03d",num);
RichRiver 2004-08-12
  • 打赏
  • 举报
回复
char ch_data[3]={0,0,0};
char temp[3]={0,0,0};
char ttt;
int num;

itoa(num,temp,10);
if(num<10)
{
ttt=temp[0];
ch_data[2]=ttt;
}else if((num>9)&&(num<100))
{
ttt=temp[0];
ch_data[1]=ttt;
ttt=temp[1];
ch_data[2]=ttt;
}else if(num>99)
strcpy(ch_data,temp);

我是这样写的,感觉麻烦:(
YunTan 2004-08-12
  • 打赏
  • 举报
回复
前面代码要#incluce <string>之后才能用。效率低,但思路清晰易写。
YunTan 2004-08-12
  • 打赏
  • 举报
回复
我从来不喜欢考虑小程序的效率,所以给一个简单代码给楼主:

itoa(num,temp,10);

std::string szNum = temp;
while(szNum.size()<3){
szNum = '0' + szNum;
}
//此时szNum的内容已经是“003”
//如果要在temp中以字符数组返回,那么这样做:
strcpy(temp,szNum.c_str());
antijpn 2004-08-12
  • 打赏
  • 举报
回复
回复人: kenan2002() ( ) 信誉:100 2004-08-12 08:56:00 得分: 0


strcat("00",itoa(num,temp,10));


什么时候strcat能这样用了?这样搞不好就是个非法操作,因为你没有正确分配空间
kenan2002 2004-08-12
  • 打赏
  • 举报
回复
同意中
kenan2002 2004-08-12
  • 打赏
  • 举报
回复
精彩!
YunTan 2004-08-12
  • 打赏
  • 举报
回复
打错了:
“字符串"008"的长度是4个字节”。

看到前面的留言:
strcat("00",itoa(num,temp,10));
这样的语句,内存如果不崩溃证明你运气非常的好。
RichRiver 2004-08-12
  • 打赏
  • 举报
回复
回复: YunTan(闲云潭影)

itoa(num,temp,10);之后
temp = [8][..][..]

我希望是[0][0][8]
antijpn 2004-08-12
  • 打赏
  • 举报
回复
如果不考虑我上面说的问题,你的转换好像也不对,转换成"008"以后应该用char[4]来保存,而不是char[3]

简单一点的就是采用两次itoa,对第一次得到的结果使用strlen,然后填充前面的内容,在调用一次itoa把真正的数据补上去

具体代码如下
extern char buf[4];
extern int ival;
itoa(ival,buf,10);
unsigned int Len=strlen(buf);//buf里面不能超过三位数字
Len=3-Len;
memset(buf,'0',Len);//前面填充'0'
itoa(ival,buf+Len,10);//填充实际数据,这样就可以了
RichRiver 2004-08-12
  • 打赏
  • 举报
回复
回复:clshan()
就是自己怎么补简单阿,有简单的函数吗?

回复: antijpn(antijpn)
最大就是999

回复: kenan2002()
不难吧?
YunTan 2004-08-12
  • 打赏
  • 举报
回复
自己补上,判断temp的长度(strlen)是多少,少于3的就在前面添加'0'。
另外提醒:
字符串"008"的长度是4个自己,而你的temp才定义了三个字节,是不够用的。num是整形,最大长度有十来位(十进制),为了安全起见,建议将你的temp定义改为:char temp[12]。
kenan2002 2004-08-12
  • 打赏
  • 举报
回复
strcat("00",itoa(num,temp,10));
kenan2002 2004-08-12
  • 打赏
  • 举报
回复
简单吗?
antijpn 2004-08-12
  • 打赏
  • 举报
回复
只给三位?那最多也只能是从char到char*阿,int型数据大了以后你怎么办?
加载更多回复(1)

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧