//问题描述: 分别用递归和非递归的方式实现一函数,其功能为将给定的整数转换成
// 相应的字符串输出。
//备注: 输入要转换的数字时不能输入错误,比如字母
//作者: 杨明哲
//完成日期: 2006-04-01
//BUG报告; dearymz@163.com
#include <iostream>
#include <stack>
using namespace std;
namespace ymz
{
//采用递归方法的“数字->字符串”转换的核心函数
//供函数itoa_recursion递归调用
int _itoa(long value, char* result)
{
long next = value / 10;
long now = value % 10;
if(next == 0)
{
*result = char(48 + now);
*(result+1) = '\0';
return 0;
}
else
{
int index = _itoa(next, result + 1);
index++;
result[index] = char(48 + now);
return index;
}
}
//采用递归方法的“数字->字符串”转换
char* itoa_recursion(int value, char* result)
{
if(value < 0)
{
result[0] = '-';
_itoa(value * -1, result + 1);
}
else
_itoa(value, result);
return result;
}
//采用非递归方法的“数字->字符串”转换
char* itoa_loop(int value, char* result)
{
stack<char> buf;
int index = 0;
//正数化处理
if(value < 0)
{
result[index] = '-';
index ++;
value *= -1;
}
//核心处理
do
{
int now = value % 10;
value /= 10;
buf.push(48 + now);
}
while(value != 0);
//倒序操作
for(; !buf.empty(); index++)
{
result[index] = buf.top();
buf.pop();
}
result[index] = '\0';
return result;
}
}
const int BUFSIZE = 64;
void main()
{
char* buf = new char[BUFSIZE + 1];
long value;
while(true)
{
cout<<"请输入一个数字:";
cin>>value;
cout<<"采用非递归方法的“数字->字符串”转换\t";
cout<<ymz::itoa_loop(value, buf)<<endl;
cout<<"采用递归方法的“数字->字符串”转换\t";
cout<<ymz::itoa_recursion(value, buf)<<endl;
cout<<"是否继续?(Y/N)";
cin.ignore(1, '\n');
cin.getline(buf, BUFSIZE);
if(buf[0] == 'N' || buf[0] == 'n')
break;
}
delete []buf;
}
评论