C++ primer 练习9.49
如果一个字符延申到中线以上,则成为ascender character, 如‘d‘,’f’,反之则是descender character, 如‘p’,‘q’,输入一个字符串,判断其中不包括ascender 和 descender字符的最长字串的长度是多少?
- find
- find_first_of
- find_last_of
- find_first_not_of
- find_last_not_of
- …
这些接口还是很好用的!多多使用!
/*
* there are 2 ways to count substring that doesn't include ascender and descender character:
* void func1();
* void func2();
* * * * * * * * * * * * * * * * * * * * * */
#include <iostream>
#include <string>
using namespace std;
void func1(){
string asdes("bdfghjklpqty");
unsigned total = 0, curr = 0;
string::size_type pos = 0, befor_pos = 0;
string st;
cout << "Please input a string" << endl;
cin >> st;
while( (pos=st.find_first_not_of(asdes, pos)) != string::npos){
++pos;
if( pos == befor_pos + 1){
++curr;
++befor_pos;
}
else{
if( curr > total)
total = curr;
curr = 1;
befor_pos = pos;
}
}
cout << "total number is: " << (total>curr ? total : curr) << endl;
}
void func2(){
string st;//string for input;
string maxSub;//string for store;
string asdes("bdfghjklpqty");//ascender and descender character;
string::size_type pos = 0, right_pos = 0;
cout << "Please input a string:" << endl;
cin >> st;
while( (pos=st.find_first_not_of(asdes, right_pos)) != string::npos){
if( (right_pos=st.find_first_of(asdes, pos))!=string::npos && (right_pos-pos)>maxSub.size())
maxSub = string(st, pos, right_pos - pos);
else if(right_pos == string::npos)
break;
}
if((pos != string::npos) && (right_pos == string::npos)){
if(maxSub.size() < (st.size()-pos))
maxSub = string(st, pos);
}
cout << "size is: " << maxSub.size() << endl;
}