在这个程序中,我应该逐行读取程序,然后使用一些给我的函数来提取字符串的一部分并将其发送到另一个函数。我在阅读文件和'存储'
时遇到问题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,我不允许编辑直方图函数之外的任何东西。关于“isAGet”的if语句中没有任何内容真正“发生”。
我的问题是;如何逐行读取文本文件,然后将每行存储到字符串中?我想也许我可以像以下一样在循环中执行它,将行存储到临时流中,使用它执行我需要的操作,然后清除流以重复该过程。还有另一种方法会更容易吗?我无法自己解决这个问题。
答案 0 :(得分:1)
不确定isAGet
和extractTheRequest
的作用,但要回答“我如何逐行阅读文本文件,然后将每行存储到字符串中”
为什么不简单呢?
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++;
}
答案 1 :(得分: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;
}
}
提及这些引用到控制台的引用。他们要表明,如果您的文件中有一个空的最后一行,getline
将返回错误,并且work_with_that_line
将不会被调用。这是getline
- 样式文件输入的一个众所周知的问题。如果您在意,请考虑使用char-by-char或二进制输入。