gpt4 book ai didi

c++ - 更改文件名,包括 char 和 float

转载 作者:行者123 更新时间:2023-11-28 01:56:50 25 4
gpt4 key购买 nike

我正在编写 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 的数字和串联对象来组合名称,如下所示:(请注意,我假设 fileNamesaveIntensityMap 的参数 已经具有 .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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com