Recipe 4.18. Counting Instances of Each Word in a Text File
Problem
You want to count the number of occurrences of each word in a text file.
Solution
Use operator>>, defined in <string>, to read contiguous chunks of text from the input file, and use a
map, defined in <map>, to store each word and its frequency in the file. Example 4-27
demonstrates
how to do this.
Example 4-27. Counting word frequencies
1   #include <iostream>
2   #include <fstream>
3   #include <map>
4   #include <string>
5
6   typedef std::map<std::string, int> StrIntMap;
7
8   void countWords(std::istream& in, StrIntMap& words) {
9
10     std::string s;
11
12     while (in >> s) {
13        ++words[s];
14     }
15  }       
16
17  int main(int argc, char** argv) {
18
19     if (argc < 2)
20        return(EXIT_FAILURE);
21
22     std::ifstream in(argv[1]);
23
24     if (!in)
25        exit(EXIT_FAILURE);
26
27     StrIntMap w;
28     countWords(in, w);
29
30     for (StrIntMap::iterator p = w.begin( );
31          p != w.end( ); ++p) {
32        std::cout << p->first << " occurred "
33                  << p->second << " times.\n";
34     }
35  }
Discussion
Example 4-27
looks simple enough, but there is more going on than it appears. Most of the subtleties
have to do with maps, so let's talk about them first.
If you're not familiar with maps, you should be. A map is a container class template that is part of the
STL. It stores key-value pairs in order according to std::less, or your custom comparison function, should
Page 201
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
Pdf split - Split, seperate PDF into multiple files in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Explain How to Split PDF Document in Visual C#.NET Application
break pdf into multiple files; pdf splitter
Pdf split - VB.NET PDF File Split Library: Split, seperate PDF into multiple files in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
VB.NET PDF Document Splitter Control to Disassemble PDF Document
break pdf; break pdf file into multiple files
Page 202
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
Online Split PDF file. Best free online split PDF tool.
Online Split PDF, Separate PDF file into Multiple ones. Download Free Trial. Split PDF file. Then set your PDF file split settings. The perfect split tool.
pdf no pages selected to print; pdf rotate single page
C# Word - Split Word Document in C#.NET
C# Word - Split Word Document in C#.NET. Explain How to Split Word Document in Visual C#.NET Application. Overview. Split Word file into two files in C#.
break password pdf; combine pages of pdf documents into one
Page 203
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
C# TIFF: C#.NET Code to Split Multipage TIFF File
XDoc.Tiff ›› C# Tiff: Split Tiff. C# TIFF - Split Multi-page TIFF File in C#.NET. C# Guide for How to Use TIFF Processing DLL to Split Multi-page TIFF File.
acrobat split pdf pages; break a pdf file
C# PowerPoint - Split PowerPoint Document in C#.NET
C# PowerPoint - Split PowerPoint Document in C#.NET. Explain How to Split PowerPoint Document in Visual C#.NET Application. C# DLLs: Split PowerPoint Document.
break apart a pdf file; break apart a pdf
Recipe 4.19. Add Margins to a Text File
Problem
Given a text file, you want to add margins to it. In other words, you want to pad either side of each line
with some character so that each line is the same width.
Solution
Example 4-28
shows how to add margins to a file using streams, strings, and the getline function
template.
Example 4-28. Adding margins to a text file
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;
const static char PAD_CHAR = '.';
// addMargins takes two streams and two numbers. The streams are for
// input and output. The first of the two numbers represents the
// left margin width (i.e., the number of spaces to insert at the 
// beginning of every line in the file). The second number represents
// the total line width to pad to.
void addMargins(istream& in, ostream& out,
int left, int right) {
string tmp;
while (!in.eof( )) {
getline(in, tmp, '\n');                     // getline is defined
// in <string>
tmp.insert(tmp.begin( ), left, PAD_CHAR);
rpad(tmp, right, PAD_CHAR);                 // rpad from Recipe
// 4.2
out << tmp << '\n';
}
}
int main(int argc, char** argv) {
if (argc < 3)
return(EXIT_FAILURE);
ifstream in(argv[1]);
ofstream out(argv[2]);
if (!in || !out)
return(EXIT_FAILURE);
int left = 8;
int right = 72;
if (argc == 5) {
left = atoi(argv[3]);
right = atoi(argv[4]);
}
addMargins(in, out, left, right);
Page 204
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
C# PDF: C#.NET PDF Document Merging & Splitting Control SDK
C# PDF - Merge or Split PDF File in C#.NET. C#.NET Q 2: The target PDF document that I need to split is password-protected. Can I
break a pdf into multiple files; pdf file specification
VB.NET PDF Library SDK to view, edit, convert, process PDF file
Tell VB.NET users how to: create a new PDF file and load PDF from other file formats; merge, append, and split PDF files; insert, delete, move, rotate, copy
add page break to pdf; break password on pdf
Page 205
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
C# PDF Library SDK to view, edit, convert, process PDF file for C#
Tell C# users how to: create a new PDF file and load PDF from other file formats; merge, append, and split PDF files; insert, delete, move, rotate, copy and
break a pdf into separate pages; pdf specification
C# PDF File & Page Process Library SDK for C#.net, ASP.NET, MVC
Jpeg. Convert PDF to Png, Gif, Bitmap Images. File and Page Process. File: Merge, Append PDF Files. File: Split PDF Document. File
split pdf by bookmark; can't select text in pdf file
Page 206
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
Recipe 4.20. Justify a Text File
Problem
You want to right- or left-justify text.
Solution
Use streams and the standard stream formatting flags right and left that are part of ios_base, defined in
<ios>. Example 4-29
shows how they work.
Example 4-29. Justify text
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;
int main(int argc, char** argv) {
if (argc < 3)
return(EXIT_FAILURE);
ifstream in(argv[1]);
ofstream out(argv[2]);
int w = 72;
if (argc == 4)
w = atoi(argv[3]);
string tmp;
out.setf(ios_base::right);   // Tell the stream to
// right-justify
while (!in.eof( )) {
out.width(w);                  // Reset width after
getline(in, tmp, '\n');        // each write
out << tmp << '\n';
}
out.close( );
}
This example takes three arguments: an input file, an output file, and the width to right-justify to. You can
use an input file like this:
With automatic download of Microsoft's (Nasdaq:
MSFT) enormous SP2 security patch to the Windows
XP operating system set to begin, the industry
still waits to understand its ramifications. Home
users that have their preferences set to receive
operating-system updates as they are made
available by Microsoft may be surprised to learn
that some of the software they already run on
their systems could be disabled by SP2 or may run
very differently.
and make it look like this:
With automatic download of Microsoft's (Nasdaq:
MSFT) enormous SP2 security patch to the Windows
XP operating system set to begin, the industry
still waits to understand its ramifications. Home
users that have their preferences set to receive
Page 207
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
Page 208
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
Page 209
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
Recipe 4.21. Squeeze Whitespace to Single Spaces in a Text
File
Problem
You have a text file with whitespace of varying lengths in it, and you want to reduce every occurrence of
a contiguous span of whitespace characters to a single space.
Solution
Use the operator>> function template, defined in <string>, to read in continuous chunks of
non-whitespace from a stream into a string. Then use its counterpart, operator<<, to write each of these
chunks to an output stream, and append a single character after each one. Example 4-30
gives a short
example of this technique.
Example 4-30. Squeezing whitespace to single spaces
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(int argc, char** argv) {
if (argc < 3)
return(EXIT_FAILURE);
ifstream in(argv[1]);
ofstream out(argv[2]);
if (!in || !out)
return(EXIT_FAILURE);
string tmp;
in >> tmp;          // Grab the first word
out << tmp;         // Dump it to the output stream
while (in >> tmp) { // operator>> ignores whitespace, so all I have
out << ' ';      // to do is add a space and each chunk of non-
out << tmp;      // whitespace
}
out.close( );
}
Discussion
This is a simple thing to do if you take advantage of streams and strings. Even if you have to implement a
variation of thisfor example, you may want to preserve new linesthe same facilities do the trick. If you
want to add new lines, you can use the solution presented in Recipe 4.16
to insert them in the right place.
See Also
Recipe 4.15
and Recipe 4.16
Page 210
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
Documents you may be interested
Documents you may be interested