⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prog12.c

📁 适合中高级学习的人参考使用的c++程序代码
💻 C
字号:
#include <vector>
#include <string>
#include <algorithm>
#include <iterator>
#include <iostream.h>
// #include <iostream>

class GreaterThan {
public:
	GreaterThan( int size = 6 ) : _size( size ){}
	int size() { return _size; }

	bool operator()(const string & s1) {
		return s1.size() > 6;
        }

private:
	int _size;
};

template <class Type>
class PrintElem {
public:
	void operator()( const Type &elem ) 
	{
		++_cnt;
		if ( _cnt % 8 == 0 ) { cout << endl; }
		cout << elem << " ";
	}
	
private:
	static int _cnt;
};

template < class Type >
	   int PrintElem<Type>::_cnt = 0;

class LessThan {
public:
	bool operator()(const string & s1, const string & s2 ) {
	     return s1.size() < s2.size();
    	}
};

typedef vector<string, allocator> textwords;

void process_vocab( vector<textwords, allocator> *pvec )
{
	if ( ! pvec ) 
	     // issue warning message
	     return;

	vector< string, allocator > texts; 

	vector<textwords, allocator>::iterator iter = pvec->begin();
	for ( ; iter != pvec->end(); ++iter )
      		copy( (*iter).begin(), (*iter).end(), back_inserter( texts ));

	// sort the elements of texts
	sort( texts.begin(), texts.end() );
	for_each( texts.begin(), texts.end(), PrintElem<string>() );

	cout << endl << endl;

	// delete all duplicate elements 
	vector<string, allocator>::iterator it;
	it = unique( texts.begin(), texts.end() );
	texts.erase( it, texts.end() );
	for_each( texts.begin(), texts.end(), PrintElem<string>() );

	cout << endl << endl;

	stable_sort( texts.begin(), texts.end(), LessThan() );
	for_each( texts.begin(), texts.end(), PrintElem<string>() );

	cout << endl << endl;

	// count number of strings greater than length 6
	int cnt = 0;

	// obsolete form of count -- standard changes this
	count_if( texts.begin(), texts.end(), GreaterThan(), cnt );

	cout << "Number of words greater than length six are "
     		<< cnt << endl;

	// ...

	static string rw[] = { "and", "if", "or", "but", "the" };
	vector<string,allocator> remove_words( rw, rw+5 );

	vector<string, allocator>::iterator it2 = remove_words.begin();
	for ( ; it2 != remove_words.end(); ++it2 ) {
		int cnt = 0;
		// obsolete form of count -- standard changes this
        	count( texts.begin(), texts.end(), *it2, cnt );
	
		cout << cnt << " instances removed:  " 
	     		<< (*it2) << endl;
	
	    	texts.erase(
	    		remove(texts.begin(),texts.end(),*it2),
	    		texts.end()
	   	);
   	}

	cout << endl << endl;
	for_each( texts.begin(), texts.end(), PrintElem<string>() );
}

typedef vector<string,allocator>::difference_type diff_type;
#include <fstream.h>

main()
{
     vector<textwords, allocator> sample;
     vector<string,allocator> 	  t1, t2; 
     string 			  t1fn, t2fn;

     cout << "text file #1: "; cin >> t1fn;
     cout << "text file #2: "; cin >> t2fn;

     ifstream infile1( t1fn.c_str());
     ifstream infile2( t2fn.c_str());

     istream_iterator< string, diff_type > input_set1( infile1 ), eos; 
     istream_iterator< string, diff_type > input_set2( infile2 );

     copy( input_set1, eos, back_inserter( t1 ));
     copy( input_set2, eos, back_inserter( t2 ));

     sample.push_back( t1 ); sample.push_back( t2 );
     process_vocab( &sample );
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -