C/C++ 一种高效便捷的数字转字符串方法
近期在参加一个比赛时,经常需要将求得的结果转换为字符串保存到txt文档中,为高效实现这一转换,特地写了一个数字转字符串的函数。这里给出了两种数字转字符串的方法,第一种是利用 sprintf函数实现数字转字符串,第二种是自己实现的数字转字符串函数。通过比较发现,第二种方法相对于第一种方法而言,大约快了10倍左右。这里将两种方法均贴了出来,以备将来再次用到时便于使用。
这两个函数在将整形数据转为字符串的同时还在结尾加上 , 标识符或者 \n 标识符
利用sprintf实现数字转字符串
// An highlighted block
sprintf(ID_char, "%u%c", ID, ',');
自定义数字转字符串函数
该函数适用于无符号32位整形数据转换为字符串使用
// An highlighted block
void num2str()
{
const char digits[11] = "0123456789";
const char digits2[] = "0001020304050607080910111213141516171819"
"2021222324252627282930313233343536373839"
"4041424344454647484950515253545556575859"
"6061626364656667686970717273747576777879"
"8081828384858687888990919293949596979899";
uint k;
uint len;
uint tmp;
int tmp_len;
for (uint i = 0; i < VertexNumbers; i++)
{
len = Judge_length(ID[i]);
tmp_len = len - 1;
while (ID[i] >= 100) {
k = (ID[i] % 100) * 2;
ID[i] /= 100;
ID_char[i][tmp_len - 1] = digits2[k];
ID_char[i][tmp_len] = digits2[k + 1];
ID_char2[i][tmp_len - 1] = digits2[k];
ID_char2[i][tmp_len] = digits2[k + 1];
tmp_len -= 2;
}
//Handle last 1-2 digits
if (ID[i] < 10)
{
ID_char[i][tmp_len] = digits[ID[i]];
ID_char2[i][tmp_len] = digits[ID[i]];
}
else
{
k = ID[i] * 2;
ID_char[i][tmp_len - 1] = digits2[k];
ID_char[i][tmp_len] = digits2[k + 1];
ID_char2[i][tmp_len - 1] = digits2[k];
ID_char2[i][tmp_len] = digits2[k + 1];
}
ID_char[i][len] = ',';
ID_char2[i][len] = '\n';
len++;
ID_char[i][len] = '\0';
ID_char2[i][len] = '\0';
ID_len[i] = len;
}
}
uint Judge_length(uint v) {
if (v < 10) return 1;
if (v < 100) return 2;
if (v < 1000) return 3;
if (v < 10000) return 4;
if (v < 100000) return 5;
if (v < 1000000) return 6;
if (v < 10000000) return 7;
if (v < 100000000) return 8;
if (v < 1000000000) return 9;
else return 10;
}
自己写的C语言程序,有错误还请多多指教。