C++ istream Removing surplus spaces from a stream.
#include <iostream> #include <fstream> #include <string> using std::string; void copy(std::istream& in, std::ostream& out, char end = ' ') { char ch {};//from ww w. jav a2s . co m bool gotSpace {false}; // True for first space in a sequence while(in.get(ch)) { if(end != ' ' && end == ch) // Check for end on cin break; if(ch==' ') if(gotSpace) continue; else gotSpace= true; else gotSpace = false; out.put(ch); } } int main(int argc, char* argv[]){ string in {"test"}; string out {"target"}; std::cout << "Reading from " << in << " and writing to " << out << std::endl; bool kbd {in == "cin" || in == "std::cin"}; // Standard input stream indicator bool scrn {out == "cout" || out == "std::cout"}; // Standard output stream indicator char end {}; // Indicates end of input on cin; if(kbd) { std::cout << "Enter the character you want to indicate end of input: "; std::cin >> end; if(scrn) copy(std::cin, std::cout, end); else { std::ofstream outFile {out}; if(!outFile) { std::cerr << "Failed to open output file. Program terminated.\n"; exit(1); } copy(std::cin, outFile, end); } } else { std::ifstream inFile {in}; if(!inFile) { std::cerr << "Failed to open input file. Program terminated.\n"; exit(1); } if(scrn) copy(inFile, std::cout); else { std::ofstream outFile {out}; if(!outFile) { std::cerr << "Failed to open output file. Program terminated.\n"; exit(1); } copy(inFile, outFile); } } std::cout << "\n Stream copy complete." << std::endl; }