我正在编写 C++ 代码,但我遇到了一些问题,因为我以前从未使用过这种语言。
我的项目 (.pro) 文件的结构包含不同的 .ccp 文件,包括:
IOFile.cpp
: 我要更改的文件名在哪里;
CModel.cpp
:其中有我的项目模型,特别是用户每次选择的参数(float),我想将其用作我的文件名。
因此,目前输出名称类似于:filename.txt,但我想重命名它以获得类似 filename_parameter.txt 的内容(例如:file_0.998.txt)。
我的 IOFile.cpp
的 void 是这样写的:
void IOFile::saveIntensityMap(const char* fileName, vector<float>* intensityMap)
{
std::ofstream file(fileName, std::fstream::out|std::fstream::trunc);
}
而参数 (ray_factor) 在 CModel.cpp
文件中初始化:
ray_factor= 0.99f
那么,我如何将 CModel
中的 ray_factor 传递给 IOfile
?以及如何编写包含字符串和 float 的文件名?
很抱歉这个愚蠢的问题,但我找不到解决方案。
最佳答案
这不是一个愚蠢的问题,关于这个特定主题有很多吨不好的建议。
首先,获取ray_factor
进入saveIntensityMap
,只需将其作为另一个参数传递:
void IOFile::saveIntensityMap(const char* fileName,
float ray_factor,
vector<float>* intensityMap)
{
...
}
其次,忘记您曾经听说过格式化的 iostreams 输出,它带来的麻烦远远多于它的值(value)。 (这是网上有很多不好建议的部分。我个人根本从不使用 iostreams;我认为老式的 <stdio.h>
API 是一个更符合人体工程学的接口(interface)。将 float 写入字符串正确控制输出格式是 iostream 最不擅长的事情之一。)
要构造您想要的文件名,请使用 snprintf
格式化 std::string
的数字和串联对象来组合名称,如下所示:(请注意,我假设 fileName
到 saveIntensityMap
的参数 不 已经具有 .txt
扩展名 - 更改它可能比将字符串拆开并放回原处;C++ 不太擅长处理字符串)
char ray_factor_buf[10];
snprintf(ray_factor_buf, sizeof ray_factor_buf, "%.2f", ray_factor);
string full_filename = fileName;
full_filename += "_";
full_filename += ray_factor_buf;
full_filename += ".txt";
std::ofstream file(full_filename, std::fstream::out|std::fstream::trunc);
如果您的 C++ 库尚未更新到 C++11,则最后一行需要更新
std::ofstream file(full_filename.c_str(), std::fstream::out|std::fstream::trunc);
关于c++ - 更改文件名,包括 char 和 float,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40892971/