C++ istream_iterator以及cin输入的一些问题

来源:互联网 发布:以下不属于数据库系统 编辑:程序博客网 时间:2024/05/10 07:45


#include <iostream>#include <iterator>#include <string>#include <vector>#include <fstream>#include <algorithm>using namespace std;int main(){istream_iterator <string> is(cin);istream_iterator <string> eof;vector<string> text;copy(is, eof, back_inserter(text));sort(text.begin(),text.end());ostream_iterator <string> os(cout, " ");copy(text.begin(),text.end(),os);return 0;}
另外可以对文件进行操作

    ifstream in_file("in.txt");  //这里就相当于UNIX里的fopen函数,打开一个文件流    ofstream out_file("in.txt");      istream_iterator<string> is(in_file);      istream_iterator<string> eof;        vector<string> text;      copy(is, eof, back_inserter(text));       sort(text.begin(), text.end());        ostream_iterator<string> os(out_file, " ");      copy(text.begin(), text.end(), os);  

另外在做第一段代码的测试时候遇到一个问题,就是没有办法终止cin输入

可以用ctrl+z或者F6

另外在论坛里看到了解决的办法

点击打开链接

#include <iostream>#include <algorithm>#include <vector>#include <iterator>#include <functional>#include <iomanip>  //noskipws定义于其中using namespace std;// 这个copy_if_not跟你的copy_break_at()完全一样template <class InputIterator, class OutputIterator, class Pred>void copy_if_not(InputIterator ifirst, InputIterator ilast,                  OutputIterator ofirst, Pred pred){while ( ifirst != ilast && !pred(*ifirst))*ofirst++ = *ifirst++;}int main(){      vector<char>  cv;      cin >> noskipws;  // 注意这里      istream_iterator<char> is(cin), es;      copy_if_not(is, es, back_inserter(cv), bind2nd(equal_to<char>(), '\n'));      //也可以用      // copy_if(is, es, back_inserter(cv), bind2nd(not_equal_to<char>(), '\n'));      cout << "End of input" << endl << "Now output:" << endl;      copy(cv.begin(), cv.end(), ostream_iterator<char>(cout));      return 0;}

不忽略空格和换行的输入,另外在遇到换行符时,结束读取输入

0 0
原创粉丝点击