使用 fstream 的替代方案
Posted
技术标签:
【中文标题】使用 fstream 的替代方案【英文标题】:Alternatives to using fstream 【发布时间】:2016-11-19 16:52:23 【问题描述】:我正在尝试使用 c++ 中的 fstream 从文本文件中读取多行二进制字符串。它目前可以正常工作,但无法正常操作字符串。从文件中读取字符串后,我需要反转字符串,这会导致空终止符位于错误的位置并导致各种错误。是否有任何替代“fstream”来将数据读取到字符串的方法,或者有什么方法可以反转从文件中读取的字符串,而不会弄乱空终止符。
这是我的代码的 sn-p:
void Baby::getStore(string fileName, string* store)
fstream myFile;
int i=0;
myFile.open(fileName.c_str(), ios::out | ios::in);
string currentLine;
if(myFile.is_open())
while(getline(myFile, currentLine))
store[i] = Baby::reverseString(currentLine);
for(int j=31; j>=0; j--)
store[j]
i++;
myFile.close();
else
cout << "File not found\n";
//reverses the string it is given
string Baby::reverseString(string rev)
string temp;
for(int i=rev.size(); i>0; i--)
temp += rev[i-1];
return temp;
【问题讨论】:
也许阅读有关密钥const
并使用std::vector
和std::array
你的问题不是fstream
。那是你的reverseString
函数坏了。这不是fstream
的错。还不清楚j
周围的内部循环应该做什么。总体而言,您的代码似乎普遍存在问题。
你写错了算法,跟 fstream 没有关系!
@NicolBolas 对不起,围绕 j 的循环是当我试图做一些我应该删除它的时候。它在哪些方面被破坏?反向字符串似乎成功地反转了传入的字符串,而不是从文件中读取的字符串。这些行在反转之前也成功存储在“存储”中。它符合要求,只是没有按预期处理字符串。
【参考方案1】:
另一种在不弄乱空终止符的情况下反转字符串的方法是std::reverse() 函数。包含算法头文件并替换此:
store[i] = Baby::reverseString(currentLine);
用这个:
std::reverse(currentLine.begin(),currentLine.end());
store[i] = currentLine;
【讨论】:
谢谢!起初我正在使用它,但我认为这是导致问题的原因,所以我编写了自己的但我现在修复了它,它不是让我悲伤的反向功能以上是关于使用 fstream 的替代方案的主要内容,如果未能解决你的问题,请参考以下文章