LISTING17.9 Using peek()and putback()
0: // Listing 17.9 - Using peek() and putback()
1: #include <iostream>
2: using namespace std;
3:
4: int main()
5: {
6: char ch;
7: cout << “enter a phrase: “;
8: while ( cin.get(ch) != 0 )
9: {
10: if (ch == ‘!’)
11: cin.putback(‘$’);
12: else
13: cout << ch;
14: while (cin.peek() == ‘#’)
15: cin.ignore(1,’#’);
16: }
17: return 0;
18: }
enter a phrase: Now!is#the!time#for!fun#!
Now$isthe$timefor$fun$
On line 6, a character variable,ch, is declared, and on line 7, the user is
prompted to enter a phrase. The purpose of this program is to turn any exclama-
tion marks (!) into dollar signs ($) and to remove any pound symbols (#).
The program loops on lines 8–16 as long as it is getting characters other than the end of
file (Ctrl+C on Windows machines, Ctrl+Z or Ctrl+D on other operating systems).
(Remember that cin.get()returns 0 for end of file.) If the current character is an excla-
mation point, it is thrown away and the $symbol is put back into the input buffer. This $
symbol is then read the next time through the loop. If the current item is not an exclama-
tion point, it is printed on line 13.
On line 14, the next character is “peeked” at, and when pound symbols are found, they
are removed using the ignore()method, as shown on line 15.
This is not the most efficient way to do either of these things (and it won’t find a pound
symbol if it is the first character), but it does illustrate how these methods work.
OUTPUT
612 Day 17
ANALYSIS
peek()and putback()are typically used for parsing strings and other data,
such as when writing a compiler.
TIP