Skip to Main Content
C++ Cookbook
book

C++ Cookbook

by D. Ryan Stephens, Christopher Diggins, Jonathan Turkanis, Jeff Cogswell
November 2005
Beginner to intermediate content levelBeginner to intermediate
594 pages
16h 23m
English
O'Reilly Media, Inc.
Content preview from C++ Cookbook

4.22. Autocorrect Text as a Buffer Changes

Problem

You have a class that represents some kind of text field or document, and as text is appended to it, you want to correct automatically misspelled words the way Microsoft Word’s Autocorrect feature does.

Solution

Using a map, defined in <map>, strings, and a variety of standard library features, you can implement this with relatively little code. Example 4-31 shows how to do it.

Example 4-31. Autocorrect text

#include <iostream> #include <string> #include <cctype> #include <map> using namespace std; typedef map<string, string> StrStrMap; // Class for holding text fields class TextAutoField { public: TextAutoField(StrStrMap* const p) : pDict_(p) {} ~TextAutoField() {} void append(char c); void getText(string& s) {s = buf_;} private: TextAutoField(); string buf_; StrStrMap* const pDict_; }; // Append with autocorrect void TextAutoField::append(char c) { if ((isspace(c) || ispunct(c)) && // Only do the auto- buf_.length() > 0 && // correct when ws or !isspace(buf_[buf_.length() - 1])) { // punct is entered string::size_type i = buf_.find_last_of(" \f\n\r\t\v"); i = (i == string::npos) ? 0 : ++i; string tmp = buf_.substr(i, buf_.length() - i); StrStrMap::const_iterator p = pDict_->find(tmp); if (p != pDict_->end()) { // Found it, so erase buf_.erase(i, buf_.length() - i); // and replace buf_ += p->second; } } buf_ += c; } int main() { // Set up the map StrStrMap dict; TextAutoField txt(&dict); dict["taht"] = "that"; dict["right"] = "wrong"; ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

C++ System Programming Cookbook

C++ System Programming Cookbook

Onorato Vaticone

Publisher Resources

ISBN: 0596007612Supplemental ContentErrata Page