CS253: Software Development with C++

Fall 2020

IO

I/O Lab


I/O, I/O, it’s off to print we go!

Description

In this lab, we’ll do some exercises with I/O streams. The files for this lab are available in ~cs253/Lab/IO. You will modify code in these files, and check them in for credit. The TAs will compile your files and execute them to ensure that they work properly.                 

Robust input operators

Consider number.cc. It creates a class called Number that’s a wrapper around an int.                 

  1. Consider how it is that << works for Number, even though operator<< wasn’t defined for this class.
  2. Consider operator>>. It doesn’t check for failure. And, yet, it works properly for:
    • valid numeric input
    • end of input
    • incorrect input (in that it sets ios::failbit)
    Understand why this is.
  3. Now, improve operator>> so that it works properly for input of “one”, “two”, “three”, “four”, and “five”, as well as working for all traditional numeric input that worked before.
  4. Turn your results in at the end.

Using fstream to modify a file in place.

Consider modify.cc. It copies its input file to its output file, replacing all instances of “Trump” with “Biden”.                 

Note the use of getline(). There are two versions of this function:

Change modify.cc to modify a single file in place. That is, the program should only take a single filename argument.                 

  1. Don’t just read the entire file into one giant string. Your code must work for colossal files that don’t fit into memory.
  2. Open the file once, in read/write mode, in an fstream.
  3. Use getline().
  4. Use the istream::tellg() and ostream::seekp() methods to ask “what’s my current read offset” and to say “where I want to write to”.
  5. Make sure that your solution works for data files that don’t contain “Trump” on every line.
  6. This approach only works if the replacement string is the same length as the original string. However, it sure is efficient.
  7. If you’re rewriting the entire file, you’re not doing a good job. Just rewrite what is needed.
  8. Turn your results in at the end.

For extra fame & glory (but no points)

Improve operator>> in number.cc even more:
If it encounters invalid input such as “zork”, it shouldn’t consume the bogus input. It should fail, and leave things such that the next read (assuming that the stream is put back into a good state) would see “zork” again.                 

How to submit your work:

In Canvas, check in the files number.cc modify.cc to the assignment “Lab10”.                 

How to receive negative points:

Turn in someone else’s work.