如何使用ostringstream让输出文件名保留规范科学计数法格式
解决方案
你遇到的问题是C++默认浮点数输出规则未启用科学计数法,且指数部分默认带前导零,按如下调整即可实现需求:
- 新增
<iomanip>头文件,用于流格式控制 - 给
ostringstream设置std::scientific标记,强制用科学计数法输出浮点数 - 添加简单的字符串处理逻辑,去除指数部分的前导零,实现
1e7而非1e07的格式效果
修改后的完整代码如下:
#include <iostream> #include <vector> #include <sstream> #include <fstream> #include <iomanip> #include <string> using namespace std; // 辅助函数:去除科学计数法字符串中指数的前导零 string formatSciString(string s) { size_t ePos = s.find('e'); if (ePos == string::npos) return s; string exp = s.substr(ePos + 1); size_t start = 0; bool isNeg = false; // 处理负指数的符号 if (exp[0] == '-') { isNeg = true; start = 1; } // 跳过指数部分的前导零 while (start < exp.size() && exp[start] == '0') { start++; } // 处理指数全为零的特殊情况 exp = (start == exp.size()) ? "0" : exp.substr(start); if (isNeg) exp = "-" + exp; return s.substr(0, ePos + 1) + exp; } int main() { vector<double> f1Series; vector<double> f2Series; double tmp; std::ifstream input; input.open("Input/f1.txt"); while (input >> tmp) f1Series.push_back(tmp); input.close(); input.open("Input/f2.txt"); while (input >> tmp) f2Series.push_back(tmp); input.close(); std::ostringstream oss1; std::ostringstream oss2; // 启用科学计数法,设置精度为1匹配示例的单有效数字需求,可根据实际需要调整精度值 oss1 << std::scientific << std::setprecision(1) << f1Series[1]; oss2 << std::scientific << std::setprecision(1) << f2Series[1]; std::string f1 = formatSciString(oss1.str()); std::string f2 = formatSciString(oss2.str()); std::ofstream st("Output/Results" + f1 + "_" + f2 + ".txt"); return 0; }
内容的提问来源于stack exchange,提问作者user123456
相关产品推荐
相关产品推荐

