HW Help:获取char而不是获取C ++行

时间:2011-10-15 23:38:59

标签: c++

我编写了以下代码,成功从文件中获取随机行;但是,我需要能够修改其中一行,所以我需要能够逐个字符地获取行。 如何更改代码才能执行此操作?

1 个答案:

答案 0 :(得分:2)

使用std::istream::get代替std::getline。只需逐字逐字地阅读字符串,直到找到\nEOFother 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并使用finderasereplace等。

更新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');
}