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' && wo
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- 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' &
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) { re
auto pos = find_if ( words. begin ( ) , words. end ( ) , [ len] ( const string & a) { return a.
auto count = words. end ( ) - pos;
string str ( "word" ) ;
cout<< count<< " " << make_plural ( count, str, "s" ) << " of length " << len<< " or longer"
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 ;
}
运行结果显示如下