C++ 新手 : my loop should CHANGE a string, 然后将字符串打印到文件中。但它正在添加到字符串中

标签 c++ string streaming iostream

我编写了用于执行计算的 C++ 代码。代码中有一个循环。在每个循环结束时,我想:

1) 获取时间,计算结果。

2) 为文件命名。名称应包含时间。

3) 将文件名打印到外部文件中。每个新循环都应覆盖前一个循环的文件名。

我遇到的第一个问题是无法删除旧文件名。所以当我的计算完成后,名字是(例如): calculationForRestartFile_0.0005476490.004925880.01763170.04375820

代替: calculationForRestartFile_04375820

我已更新此问题以纳入 Mat 的建议。谢谢垫。但是现在我在外部文件中没有得到任何东西。谁能看到我哪里出错了?如果有任何建议,我将不胜感激。

// Above loop:
  std::string  filename = "calculationForRestartFile_";  // Part of the file name that ALL files should have
  ofstream fileNameAtHighestTimeStream;    

  std::string       convertedToString;                  // This and the line below:
  std::stringstream storeNumberForConversion;           // For storing a loop number/time as a string

// Inside loop:
    storeNumberForConversion << global_time << flush;       // Turn the time/loop number into a string that can be added to the file name for a particular loop
    convertedToString = storeNumberForConversion.str();

    fileNameAtHighestTimeStream.open ("externalFile", ios::out | ios::app ); 
    fileNameAtHighestTimeStream << filename << convertedToString << endl;    // Append the time/loop name to the file name and write to the external file
    fileNameAtHighestTimeStream.close();

// End loop

最佳答案

问题是这一行在循环内添加到您的 stringstream 中。您永远不会重置其内容。

storeNumberForConversion << global_time << flush;

最简单的做法是将 storeNumberForConversion 的声明移动到您的循环中,以便在您使用它之前将其创建为空。

或者,您可以在格式化操作后重置它。

storeNumberForConversion.str( std::string() );

关于C++ 新手 : my loop should CHANGE a string, 然后将字符串打印到文件中。但它正在添加到字符串中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6320659/

相关文章:

c++ - GMock : error: cannot convert ‘cv::MatExpr’ to ‘bool’ in return

字符串转换

java - 去除重复的字符串

audio - 2 个 wav 文件的 GStreamer 管道到具有 2 个 channel 的单个 RTSP

c++ - 比较两个映射以查看一个是否是子集

c++ - 限制指针算术或比较的基本原理是什么?

java - 表达式的类型必须是数组类型,但它解析为字符串

Android ExoPlayer 更改选定的轨道

C++跨平台网络摄像头通过套接字流式传输

c++ - 未限定范围的多行 MACROS 的危险