c++ primer练习9.49

C++ primer 练习9.49

如果一个字符延申到中线以上,则成为ascender character, 如‘d‘,’f’,反之则是descender character, 如‘p’,‘q’,输入一个字符串,判断其中不包括ascender 和 descender字符的最长字串的长度是多少?

  1. find
  2. find_first_of
  3. find_last_of
  4. find_first_not_of
  5. find_last_not_of

  6. 这些接口还是很好用的!多多使用!
/*                                                                                                                                                        
 * 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;

}                                                                                                                                                         
                                                                                                                                        
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值