C++ Primer(第5版) 练习 10.16
练习 10.16 使用lambda编写你自己版本的biggies。
环境:Linux Ubuntu(云服务器)
工具:vim
代码块
# include <iostream>
# include <vector>
# include <string>
# include <algorithm>
using namespace std; string make_plural ( size_t ctr, string & word, const string & ending = "s" ) { int size = word. size ( ) ; if ( ctr <= 1 ) { return word; } else { if ( word[ size- 1 ] == 's' || word[ size- 1 ] == 'x' || ( word[ size- 1 ] == 'h' && word[ size- 2 ] == 's' ) || ( word[ size- 1 ] == 'h' && word[ size- 2 ] == 'c' ) ) { return word + "e" + ending; } else if ( word[ size- 1 ] == 'y' && ( word[ size- 2 ] != 'a' && word[ size- 2 ] != 'e' && word[ size- 2 ] != 'i' && word[ size- 2 ] != 'o' && word[ size- 2 ] != 'u' ) ) { word[ size- 1 ] = 'i' ; return word + "e" + ending; } else if ( ( word[ size- 3 ] != 'a' && word[ size- 3 ] != 'e' && word[ size- 3 ] != 'i' && word[ size- 3 ] != 'o' && word[ size- 3 ] != 'u' ) && ( word[ size- 2 ] != 'a' && word[ size- 2 ] != 'e' && word[ size- 2 ] != 'i' && word[ size- 2 ] != 'o' && word[ size- 2 ] != 'u' ) ) { if ( word[ size- 1 ] == 'f' ) { word[ size- 1 ] = 'v' ; return word + ending; } else if ( word[ size- 2 ] == 'f' && word[ size- 1 ] == 'e' ) { word[ size- 2 ] = 'v' ; return word + "e" + ending; } } else { return word + ending; } } return word;
} void elimDups ( vector< string> & words) { sort ( words. begin ( ) , words. end ( ) ) ; auto end = unique ( words. begin ( ) , words. end ( ) ) ; words. erase ( end, words. end ( ) ) ;
} void biggies ( vector< string> & words, vector< string> :: size_type len) { elimDups ( words) ; stable_sort ( words. begin ( ) , words. end ( ) , [ ] ( const string & a, const string & b) { return a. size ( ) < b. size ( ) ; } ) ; auto pos = find_if ( words. begin ( ) , words. end ( ) , [ len] ( const string & a) { return a. size ( ) >= len; } ) ; auto count = words. end ( ) - pos; string str ( "word" ) ; cout<< count<< " " << make_plural ( count, str, "s" ) << " of length " << len<< " or longer" << endl; for_each ( pos, words. end ( ) , [ ] ( const string & s) { cout<< s<< " " ; } ) ; cout<< endl;
} int main ( ) { vector< string> words; string str; cout<< "Enter strings: " ; while ( cin>> str) { words. push_back ( str) ; if ( cin. get ( ) == '\n' ) { break ; } } biggies ( words, 5 ) ; return 0 ;
}
运行结果显示如下