1

在这个程序中,我应该逐行阅读程序,然后使用提供给我的一些函数来提取字符串的一部分并将其发送到另一个函数。我在读取文件和“存储”时遇到问题

void histogram(const int MaxPages, istream& input, ostream& output)
{
CountedLocation *array[MaxPages];
int linenum = 0;

string temp;
//getline(input, linestring);
//output << linestring;
while (linenum < MaxPages)
{
   string linestring = "";
   getline(input, linestring);
   //linenum++;
   extractTheRequest(linestring);
   if (isAGet(linestring) == true)
   {
       extractLocator(linestring);
       linenum++;
       output << linestring << endl;
       output << "test1";
   }
   linenum++;
}

问题似乎是程序从未真正“读取”文件。我尝试在字符串 temp 的初始化下方将线串初始化为“string linestring =”f“”。该程序当然会将文本文件输出为几个'f'串在一起。我尝试查看如何逐行阅读,但大多数人不使用 istream,并且我不允许编辑直方图函数之外的任何内容。if 语句中关于“isAGet”的任何内容都没有真正“发生”。

我的问题是;如何逐行读取文本文件,然后将每一行存储到一个字符串中?我想也许我可以像下面那样在循环中执行此操作,将行存储到临时流中,用它做我需要的事情,然后清除流以重复该过程。还有另一种更容易的方法吗?我无法自己弄清楚。

4

2 回答 2

1

不知道你做什么isAGetextractTheRequest但回答“我如何逐行读取文本文件,然后将每一行存储到一个字符串中”

为什么不简单地这样做呢?

std::vector<std::string> vec;
while ( std::getline(input, linestring) && (linenum < MaxPages ) )
{
  //...
  //Store into std::vector, if required
  vec.push_back(linestring); 

  //.. use other calls 
  output << linestring ;
  linenum++;
}
于 2013-10-24T15:05:50.630 回答
1

代码应如下所示:

void histogram(const int MaxPages, istream& input, ostream& output) {
    if (!input.good()) {
        cerr << "File doesn't exist" << endl;
        return;
    }

    string line;
    for (int line_no = 0; getline(input, line); ++line_no) {
        output << '"' << line << '"' << endl;
    }
}

Mention those quotes put to console. They're to show that in case your file has an empty last line, getline will return an error, and work_with_that_line won't get called. It's a wide known problem with getline-style file input. In case you care, consider using char-by-char or binary input.

于 2013-10-24T15:17:07.467 回答