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.
                
- Consider how it is that
<<
works for Number
, even though
operator<<
wasn’t defined for this class.
- 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.
- 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.
- 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.
                
- Don’t just read the entire file into one giant string. Your code must
work for colossal files that don’t fit into memory.
- Open the file once, in read/write mode, in an fstream.
- Use getline().
- 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”.
- Make sure that your solution works for data files that
don’t contain “Trump” on every line.
- This approach only works if the replacement string is the same length
as the original string. However, it sure is efficient.
- If you’re rewriting the entire file, you’re not doing a good
job. Just rewrite what is needed.
- 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.