moving data within a c++ program

16
CSE 232: Moving Data Within a C++ Program Moving Data Within a C++ Program • Input Getting data from the command line (we’ve looked at this) Getting data from the standard input stream Getting data from files • Output Sending data to standard output (we’ve looked at this) Sending data to files Transfer within the program Moving data into and out of different types of variables Moving data into and out of different data structures

Upload: tarik-chandler

Post on 02-Jan-2016

19 views

Category:

Documents


0 download

DESCRIPTION

Moving Data Within a C++ Program. Input Getting data from the command line (we’ve looked at this) Getting data from the standard input stream Getting data from files Output Sending data to standard output (we’ve looked at this) Sending data to files Transfer within the program - PowerPoint PPT Presentation

TRANSCRIPT

CSE 232: Moving Data Within a C++ Program

Moving Data Within a C++ Program• Input

– Getting data from the command line (we’ve looked at this)– Getting data from the standard input stream– Getting data from files

• Output– Sending data to standard output (we’ve looked at this)– Sending data to files

• Transfer within the program– Moving data into and out of different types of variables– Moving data into and out of different data structures

CSE 232: Moving Data Within a C++ Program

Overview of Today’s Session• Using the on-line C++ reference pages (throughout)

• Basic input and output stream features

• Basic file input and output stream features

• Moving data into and out of variables

• Moving character data into and out of strings

• Moving data into and out of a vector container

CSE 232: Moving Data Within a C++ Program

C++ Reference Link on CSE232 Web Page

CSE 232: Moving Data Within a C++ Program

Main C++ Reference Page

CSE 232: Moving Data Within a C++ Program

C++ I/O Page

CSE 232: Moving Data Within a C++ Program

C++ I/O Examples Page

CSE 232: Moving Data Within a C++ Program

File I/O Examples

• Exercise: try out examples from C++ I/O reference– Do they work as written?– What files do you need to include to make them work?– What happens if you try to open a file that doesn’t exist?– What other ways can you explore the behaviors of the

features those examples are using/illustrating?

CSE 232: Moving Data Within a C++ Program

C++ I/O Display All

CSE 232: Moving Data Within a C++ Program

Review: C++ Input/Output Stream Classes

#include <iostream>using namespace std;int main (int, char*[]){ int i; // cout == std ostream cout << “how many?” << endl; // cin == std istream cin >> i; cout << “You said ” << i << “.” << endl; return 0;}

• <iostream> header file– Use istream for input– Use ostream for output

• Overloaded operators<< ostream insertion operator>> istream extraction operator

• Other methods– ostream: write, put– istream: get, eof, good, clear

• Stream manipulators– ostream: flush, endl, setwidth,

setprecision, hex, boolalpha

CSE 232: Moving Data Within a C++ Program

Review: C++ File I/O Stream Classes

#include <fstream>using namespace std;int main (){ ifstream ifs; ifs.open (“in.txt”); ofstream ofs (“out.txt”); if (ifs.is_open () && ofs.is_open ()) { int i; ifs >> i; ofs << i; } ifs.close (); ofs.close (); return 0;}

• <fstream> header file– Use ifstream for input– Use ofstream for output

• Other methods– open, is_open, close– getline– seekg, seekp

• File modes– in, out, ate, app, trunc, binary

CSE 232: Moving Data Within a C++ Program

Redirecting File Output

• Exercise: printing to a file vs. to stdout– Use the standard syntax for main that we used last week– Program always writes out “hello, world!”– If argc > 1 writes to file whose name is given by argv[1]– Otherwise writes to standard output

CSE 232: Moving Data Within a C++ Program

Review: C++ string Class

#include <iostream>#include <string>using namespace std;int main (int, char*[]) { string s; // empty s = “”; // empty s = “hello”; s += “, ”; s = s + “world!”; cout << s << endl; return 0;}

• <string> header file• Various constructors• Assignment operator• Overloaded operators

+= + < >= == []• The last one is really

useful: indexes stringif (s[0] == ‘h’) …

CSE 232: Moving Data Within a C++ Program

Review: C++ String Stream Classes

#include <iostream>#include <fstream>#include <sstream>using namespace std;int main (){ ifstream ifs (“in.txt”); if (ifs.is_open ()) { string line_1, word_1; getline (ifs, line_1); istringstream iss (line_1); iss >> word_1; cout << word_1 << endl; } return 0;}

• <sstream> header file– Use istringstream for input– Use ostringstream for output

• Useful for scanning input– Get a line from file into string– Wrap string in a stream– Pull words off the stream

• Useful for formatting output– Use string as format buffer– Wrap string in a stream– Push formatted values into

stream– Output formatted string to file

CSE 232: Moving Data Within a C++ Program

Using C++ String Stream Classes#include <string>#include <cstring>#include <sstream>using namespace std;int main (int argc, char *argv[]){ if (argc < 3) return 1; ostringstream argsout; argsout << argv[1] << “ ” << argv[2]; istringstream argsin (argsout.str()); float f,g; argsin >> f; argsin >> g; cout << f << “ / ” << g << “ is ” << f/g << endl; return 0;}

• Program gets arguments as C-style strings

• But let’s say we wanted to input floating point values from the command line

• Formatting is tedious and error-prone in C-style strings (sprintf etc.)

• iostream formatting is friendly• Exercise: check whether any

of the strings passed by argv are unsigned decimal integers (leading zeroes still ok)– print their sum if there are any– otherwise print the value 0

CSE 232: Moving Data Within a C++ Program

In-Memory “(in core)” Formatting

• Exercise: read and translate a file– Read integers and booleans (“true”, “false”) from a file

• Test by writing your own test file with different combinations

– Use a string to get one line of data at a time– Use a string stream to extract space separated tokens into

another string variable– Check whether each token is a boolean (if not treat as int)

• Convert to local variable of that type using another string stream• Printout whether it’s a boolean or an integer, and print out the

value of the local variable, making sure to preserve formatting

CSE 232: Moving Data Within a C++ Program

A Couple More Things to Try

• Exercise: printing out text from a named file– Open a text file whose name is given in argv– Print out the contents of the file to standard output– Detect the end of the file

• Stop reading text, close the named file, and end the program

• Exercise: typing text into a named file– Read text from the standard input stream– Put the text into a file whose name is given by argv[1]– Detect when the user types in the character sequence q!

• Stop reading text, close the named file, and end the program