chapter 11 standard c++ strings and file i/o

25
Chapter 11 Standard C++ Strings and File I/O Dept of Computer Engineering Khon Kaen University

Upload: nadda

Post on 27-Jan-2016

55 views

Category:

Documents


1 download

DESCRIPTION

Chapter 11 Standard C++ Strings and File I/O. Dept of Computer Engineering Khon Kaen University. Outline. Reading inputs Formatted input Unformatted input The Standard C++ String Type Files String Streams. The Input Operator. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Chapter 11 Standard C++ Strings and File I/O

Chapter 11Standard C++ Strings and File I/O

Dept of Computer EngineeringKhon Kaen University

Page 2: Chapter 11 Standard C++ Strings and File I/O

178110: Computer Programming (II/2546) 2

Outline Reading inputs

Formatted input Unformatted input

The Standard C++ String Type

Files String Streams

Page 3: Chapter 11 Standard C++ Strings and File I/O

178110: Computer Programming (II/2546) 3

The Input Operator Input passes through an istream

object and output passes through an ostream object

The istream class defines the behavior of objects like cin

The most common behavior is the use of the extraction operator >> (also called the input operator)

Page 4: Chapter 11 Standard C++ Strings and File I/O

178110: Computer Programming (II/2546) 4

Formatted Input It has two operands

The istream object from which it is extracting characters

The object to which it copies the corresponding value formed from those characters

This process of forming a typed value from raw input characters is called formatting

Page 5: Chapter 11 Standard C++ Strings and File I/O

178110: Computer Programming (II/2546) 5

Example: Formatted Input

int main(){

int n;cin >> n;cout << "n ='" << n << "'" << endl;

} What is the output when you enter

“ 46”? n=’46’

Page 6: Chapter 11 Standard C++ Strings and File I/O

178110: Computer Programming (II/2546) 6

The Extraction Operator >>

The extraction operator >> formats the data that it receives through its input stream

It extracts characters from the stream and uses them to form a value of the same type as its second operand

It ignores all whitespace characters that precede the characters it uses

Can you use the extraction operator to read whitespace characters? No, we must use an unformatted input operation

Page 7: Chapter 11 Standard C++ Strings and File I/O

178110: Computer Programming (II/2546) 7

The Expression cin >> x The operator expression cin >> x

has a value that can be interpreted in a condition as boolean (true or false)

When the expression will be true? When the reading of the input is

successful This allows such an expression to be

used to control a loop

Page 8: Chapter 11 Standard C++ Strings and File I/O

178110: Computer Programming (II/2546) 8

Using the Extraction Operator

int n;while (cin >> n)

cout << "n= " << n << endl; What are the outputs of these

inputs? 46 22 44 66 88 33, 55, 77, 99

Page 9: Chapter 11 Standard C++ Strings and File I/O

178110: Computer Programming (II/2546) 9

Unformatted Input The <iostream> file defines several

functions inputting characters and C-strings that do not skip over whitespace

The most common are the cin.get() function for reading individual characters and the cin.getline() function for reading C-strings

Page 10: Chapter 11 Standard C++ Strings and File I/O

178110: Computer Programming (II/2546) 10

Inputting Characters with cin.get()

Function while (cin.get(c))

{if (c >= 'a' && c <= 'z')

c += 'A' - 'a'; // capitalize ccout.put(c);if (c == '\n')

break;}

What are the outputs of these inputs? 123,456 Hello kku

Page 11: Chapter 11 Standard C++ Strings and File I/O

178110: Computer Programming (II/2546) 11

Inputting C-Strings with cin.getline() Function

const int LEN=32; // maximum word lengthconst int SIZE=10; // array sizetypedef char Name[LEN]; // defines Name to be a C-

string typeint main(){

Name king[SIZE];int n = 0;while (cin.getline(king[n++], LEN) && n<= SIZE);--n; // now n = the number of names readfor (int i=0; i < n; i++)

cout << "\t" << i+1 << ". " << king[i] << endl;

}

Page 12: Chapter 11 Standard C++ Strings and File I/O

178110: Computer Programming (II/2546) 12

The Standard C++ string Type

Standard C++ defines its string type in the <string> header file

Objects of type string can be declared and initialized in several ways string s1; // s1 contains 0 characters string s2 = “New York”; // s2 has 8

characters string s3(60, ‘*’); // s3 has 60 ‘*’ characters string s4 = s3; // s4 has 60 ‘*’ characters string s5(s2, 4, 2); // s5 = ‘Yo’

Page 13: Chapter 11 Standard C++ Strings and File I/O

178110: Computer Programming (II/2546) 13

C++ string Type C++ strings have a getline() function that

works almost the same way as the cin.getline() function for C-strings string s6 = “ABCDEFG”; string s7; getline(cin,s7); // read an entire line of characters into s7

They also use the subscript operator the same way that C-strings do: char c = s6[2]; // assign ‘C’ to character c s6[4] = ‘*’; // s6 = ABCD*FG

Page 14: Chapter 11 Standard C++ Strings and File I/O

178110: Computer Programming (II/2546) 14

C++ string Type C++ strings can be converted to C-

strings like this: const char* cs = s6.c_str();

The C++ string class also defines a length() function that can be used like this to determine how many characters are stored in a string cout << s6.length() << endl;

Page 15: Chapter 11 Standard C++ Strings and File I/O

178110: Computer Programming (II/2546) 15

C++ string Type Operators

C++ strings can be compared using the relational operators like fundamental types: string s8 = “hello”; string s9 = “waddee”; if (s8 < s9)

cout << “hello precedes waddee”;else

cout << “hello does not precede waddee”;

Page 16: Chapter 11 Standard C++ Strings and File I/O

178110: Computer Programming (II/2546) 16

C++ string Type Operator

You can also concatenate and append strings using the + and += operators; s6 = s6 + “HIJK”; // s6 = “ABCD*FGHIJK” s2 += s5; // s2 = “New YorkYo”

The substring() function is used like this s4 = s6.substr(5,3); // s4 = “FGH”

The erase() function is used like this s6.erase(4, 2); // s6 = “ABCDGHIJK”

Page 17: Chapter 11 Standard C++ Strings and File I/O

178110: Computer Programming (II/2546) 17

C++ string Type Operators

The replace() function is used like this s6.replace(5,2, “xyz”); // s6 = “ABCDGxyzJK”

The find() function returns the index of the first occurrence of a given substring string s10 = “Khon Kaen U” cout << s10.find(“on”) << endl; // print 2 cout << s10.find(“en”) << endl; // print 7

Page 18: Chapter 11 Standard C++ Strings and File I/O

178110: Computer Programming (II/2546) 18

Using the C++ string Type

int main(){

string word;while (cin >> word) {

cout << "before: " << word << endl;int numChars = word.length();for (int i = 0; i < numChars; i++) {

if (is_vowel(word[i]))word.replace(i,1,"*"); }

cout << "after: " << word << endl; }

}bool is_vowel(char c){

return (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' ||c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U');

}

Page 19: Chapter 11 Standard C++ Strings and File I/O

178110: Computer Programming (II/2546) 19

Files File processing in C++ is very similar to

ordinary interactive input and output because the same kind of stream objects are used

Input from a file is managed by an ifstream object the same way that input from the keyboard is managed by the istream object cin

Output to a file is managed by an ofstream object the same way that output to the monitor or printer is managed by the ostream object cout

Page 20: Chapter 11 Standard C++ Strings and File I/O

178110: Computer Programming (II/2546) 20

Files Unlike istream and ostream, ifstream

and ofstream must be declared explicitly and initialized with the external name of the file which they manage

You also have to #include the <fstream> header file that defines ifstream and ofstream

Page 21: Chapter 11 Standard C++ Strings and File I/O

178110: Computer Programming (II/2546) 21

Capitalizing All the Words in a Text File

#include <fstream>…int main(){ ifstream infile("input.txt");

ofstream outfile("output.txt");string word; char c;while (infile >> word){ if (word[0] >= 'a' && word[0] <= 'z')

{ word[0] = word[0] + 'A' - 'a';}outfile << word << " ";

}}

Page 22: Chapter 11 Standard C++ Strings and File I/O

178110: Computer Programming (II/2546) 22

Merging Two Sorted Data Files

bool more(ifstream& fin, int& n){

if (fin >> n)return true;

elsereturn false;

}

bool copy(ofstream& fout, ifstream& fin, int& n){

fout << " " << n;return more(fin, n);

}

Page 23: Chapter 11 Standard C++ Strings and File I/O

178110: Computer Programming (II/2546) 23

Merging Two Sorted Data Files

int main(){

ifstream fin1("north.dat"); ifstream fin2("south.dat");ofstream fout("combined.dat");int n1, n2; bool more1 = more(fin1, n1); bool more2 = more(fin2, n2);while (more1 && more2){if (n1 < n2)

more1 = copy(fout, fin1, n1);else

more2 = copy(fout, fin2, n2);}while (more1)

more1 = copy(fout, fin1, n1);while (more2)

more2 = copy(fout, fin2, n2);fout << endl;

}

Page 24: Chapter 11 Standard C++ Strings and File I/O

178110: Computer Programming (II/2546) 24

String Streams A string stream is a stream object

that allows a string to be used as an internal text file

This is also called in-memory I/O String streams are quite useful for

buffering input and output Their types isstringstream and

ostringstream are defined in the <sstream> header file

Page 25: Chapter 11 Standard C++ Strings and File I/O

178110: Computer Programming (II/2546) 25

Using an Output String Stream

int main() { string s; istringstream iss("ABCDEFG 44"); string s;iss >> s; int n;iss >> n; cout << “s is “ << s << “ n is “ << n

<< endl;}