我编写了以下代码,成功从文件中获取随机行;但是,我需要能够修改其中一行,所以我需要能够逐个字符地获取行。 如何更改代码才能执行此操作?
答案 0 :(得分:2)
使用std::istream::get
代替std::getline
。只需逐字逐字地阅读字符串,直到找到\n
,EOF或other errors。我还建议您阅读完整的std::istream
reference。
祝你的作业好运!
<强>更新强>
好吧,我认为一个例子不会受到伤害。如果我是你,我就是这样做的。#include <string>
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
static std::string
answer (const string & question)
{
std::string answer;
const string filename = "answerfile.txt";
ifstream file (filename.c_str ());
if (!file)
{
cerr << "Can't open '" << filename << "' file.\n";
exit (1);
}
for (int i = 0, r = rand () % 5; i <= r; ++i)
{
answer.clear ();
char c;
while (file.get (c).good () && c != '\n')
{
if (c == 'i') c = 'I'; // Replace character? :)
answer.append (1, c);
}
}
return answer;
}
int
main ()
{
srand (time (NULL));
string question;
cout << "Please enter a question: " << flush;
cin >> question;
cout << answer (question) << endl;
}
...唯一的问题是我不知道为什么你需要通过char读取字符串char才能修改它。您可以修改std :: string对象,这更容易。假设您想用“假设”替换“我认为”?你可能最好还是阅读更多
std::string
并使用find
,erase
,replace
等。
更新2:
您的最新代码会发生什么变化 - 您打开一个文件,然后逐个字符地获取其内容,直到您到达换行符(\n
)。因此,在任何一种情况下,您将最终读取第一行,然后您的do-while循环将终止。如果你看看我的例子,我做了while循环,它在for循环中读取行直到\n
。所以这基本上就是你应该做的 - 重复你的do-while循环,你想要/可以从该文件获得多少行。例如,类似这样的内容将为您提供两行代码:
for (int i = 1; i <= 2; ++i)
{
do
{
answerfile.get (answer);
cout << answer << " (from line " << i << ")\n";
}
while (answer != '\n');
}