鄙视千万个星星中的一颗!!!!
一位朋友问的问题:
用指针实现char* itoa(int,char*,int)操作函数?在线等100分
return Value :each of these functions returns a pointer to string. reuturn NULL if error.
parameters:value---Number to be converted;string---String result;len----Buffer length of string.
星星:
//呵呵楼上说没有错
//需要判断正负
//偶都忘记了 不好意思修改下
char* itoa_( int ii_source, char* &opc_dest, int& oi_dest)
{
int i = 0, ti_source = ii_source;
for( ; ; )//得到位数即字符数目
{
if ( (ti_source /= 10) != 0 )
{
++oi_dest;
continue;
}
++oi_dest;
break;
}
opc_dest = (char*)malloc(oi_dest*sizeof(char));
if( ii_source >= 0 )//负数处理
ti_source = ii_source;
else
ti_source = -ii_source;
for( i = 0; i < oi_dest; ++i ) //处理字符数
{
opc_dest[oi_dest-i-1] = ti_source%10;
ti_source /= 10;
}
if( ii_source < 0 )//处理下负数
opc_dest[0] = -opc_dest[0];
return opc_dest;//返回地址需要释放
}
void main(void)
{
int t_t_n = -1234;
char* t_p_c = 0;
int t_l = 0;
t_p_c = itoa_( t_t_n, t_p_c, t_l );
delete[] t_p_c;//记得释放
}
我:
楼上理解好象不对,第一个参数提供的是要转换的数值,第二和三个提供的是空间,不能在函数中分配空间,你怎么连引用都用上了 ^_^
我觉得这样写好一点:
char* itoa(int n,char* str,int len)
{
bool flag=false;
if(n<0){
n=-n;
flag=true;
}
str[--len]=0;
do{
str[--len]=n%10+'0';
n/=10;
}while(n>0);
if(flag){
str[--len]='-';
}
if(len>=0)
return str+len;
return NULL;
}
星星:
呵呵楼上的观点我不敢恭维
第一个参数提供的是要转换的数值//是源操作数
第二和三个提供的是空间//第三个参数提供什么空间?提供空间仅仅一个char字符串int数目要提供什么?
不能在函数中分配空间,你怎么连引用都用上了//-_-我无话可说 只问句你学过c或者c++吗?
另外对于源操作数的位数如果你在程序后面的第三个参数指定
简直不可思议 为什么程序运行在未知的情况下,你如何得到一个操作数的位数你如何指定?
汗 可能是我不理解你的高深的意图
或者说在系统的itoa中 第三个参数处理了
各种进制状况
可是看你的程序
好象也不是用来处理10进制 或者 2进制 16进制的情况?
偶只是处理了10进制
再仔细看下楼主的题目:参数描述
value---Number to be converted;//待转化的数
string---String result;//字符串结果保存
len----Buffer length of string //字符串字节长度
偶没有翻译错吧
这里的参数偶想没有理解错吧!!!
Int的大小难道不能确定范围吗?
为什么还要进行限制呢?最多4个字节表书不过10多位
如果说 char* 在外部分配了空间了 或许 len标志他的分配的长度还能说的过去
按照楼主提供的定义 不一定非要在外部分配空间
因为 return的char*还是 传入的地址 没什么意义了
更合理的我认为
char* temp ;//在内部分配 return出来
或者 静态的char数组 return出来
return NULL; 可能在malloc或者new异常返回
我不认为 len 是用来限制的 ,起码不是来限制操作源的~~~~
实在没有什么意义