Read all characters while compressing whitespaces : unique copy « STL Algorithms Modifying sequence operations « C++






Read all characters while compressing whitespaces

 
 

/* The following code example is taken from the book
 * "The C++ Standard Library - A Tutorial and Reference"
 * by Nicolai M. Josuttis, Addison-Wesley, 1999
 *
 * (C) Copyright Nicolai M. Josuttis 1999.
 * Permission to copy, use, modify, sell and distribute this software
 * is granted provided this copyright notice appears in all copies.
 * This software is provided "as is" without express or implied
 * warranty, and with no claim as to its suitability for any purpose.
 */
#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>
#include <locale>
using namespace std;

class bothWhiteSpaces {
  private:
    const locale& loc;    // locale
  public:
    /* constructor
     * - save the locale object
     */
    bothWhiteSpaces (const locale& l) : loc(l) {
    }
    /* function call
     * - returns whether both characters are whitespaces
     */
    bool operator() (char elem1, char elem2) {
        return isspace(elem1,loc) && isspace(elem2,loc);
    }
};

int main()
{
    string contents;

    // don't skip leading whitespaces
    cin.unsetf (ios::skipws);

    //Read all characters while compressing whitespaces
    unique_copy(istream_iterator<char>(cin),    // beginning of source
                istream_iterator<char>(),       // end of source
                back_inserter(contents),        // destination
                bothWhiteSpaces(cin.getloc())); // criterion for removing

    // process contents
    // - here: write it to the standard output
    cout << contents;
}

/* 
string
string

asdf


string
string
asdf
Terminate batch job (Y/N)? n

 */        
  








Related examples in the same category

1.Remove adjacent duplicates: unique_copy
2.Use unique_copy to copy elements in an array to list with back_inserter
3.Copy only unique elements in a vector into another vector
4.Use unique_copy to print elements with consecutive duplicates removed
5.Use unique_copy to print elements without consecutive entries that differ by one
6.Copy standard input to standard output while compressing spaces