简单的C++字符串问题:编写如下面要求一个函数,那个最好呢?求各位出出点子如何优化。
bool format_float(double innum, int precision,char *buff)
{//函数实现
}
要求:假设您要编写一个函数,可以将传入的 innum 浮点数格式化为一个字符串,并通过精度参数 precision 控制输出的小数位数,并将格式化后的结果存储在一个长度为 128 的缓冲区中。
下面代码可以做到但是感觉不是那么完美,你会如何用认为最好的方式写这段代码呢?:
以下是 C++ 版本的代码:
#include <iostream>
using namespace std;
void format_number(double innum, int precision, string& buff) {
// 将输入的数字转为字符串
string innum_str = to_string(innum);
// 如果输入的数字没有小数部分,直接返回字符串
if (innum_str.find('.') == string::npos) {
buff += innum_str;
return;
}
// 拆分整数和小数部分
string int_part = innum_str.substr(0, innum_str.find('.'));
string dec_part = innum_str.substr(innum_str.find('.') + 1);
// 在小数部分末尾补0,直到达到指定精度
dec_part.append(precision - dec_part.length(), '0');
// 把整数部分和精度处理后的小数部分组合成新的字符串,并写入缓冲区
buff += int_part + "." + dec_part;
}
int main() {
// 定义字符串缓冲区
string result_buffer;
// 调用函数,并将结果写入缓冲区
format_number(3.14159, 2, result_buffer);
cout << result_buffer << endl; // 应输出"3.14"
// 清空缓冲区
result_buffer.clear();
// 调用函数,并将结果写入缓冲区
format_number(3.14, 4, result_buffer);
cout << result_buffer << endl; // 应输出"3.1400"
// 清空缓冲区
result_buffer.clear();
// 调用函数,并将结果写入缓冲区
format_number(42, 3, result_buffer);
cout << result_buffer << endl; // 应输出"42"
return 0;
}
输出结果:
3.14
3.1400
42