• Effective_STL 学习笔记(三十五) 通过 mismatch 和 lexicographical 比较实现简单的忽略大小写字符串比较


    怎么用 STL 进行忽略大小写的字符串的比较?

    首先实现两个字符忽略大小写的比较:

     1   int ciCharCompare( char c1, char c2 )      // 忽略大小写比较字符
     2   {
     3     int Ic1 = tolower( static_cast<unsigned char> (c1) );  // 都转换成小写
     4     int Ic2 = tolower( static_cast<unsigned char> (c2) );  // 头文件<cctype>
     5     if( Ic1 < Ic2 )
     6       return -1;
     7     if( Ic1 > Ic2 )
     8       return 1;
     9     return 0;
    10   }

    基于 mismatch 算法,确定两个区间中第一个对应的不相同的值的位置

     1   int ciStringCompare( const string & s1, const string & s2 )
     2   {
     3     if( s1.size() <= s2.size() )
     4       return ciStringCompareImpl( s1, s2 );
     5     else
     6       return -ciStringCompareImpl( s2, s1 );
     7   }
     8   int ciStringCompareImpl( const string & s1, const string & s2 )
     9   {
    10     typedef pair< string::const_iterator, string::const_iterator > PSCI;
    11     PSCI p = mismatch( s1.begin(), s1.end(), s2.begin(), not2( ptr_fun( ciCharCompare ) ) );
    12     if( p.first == s1.end() )
    13     {
    14       if( p.second == s2.end() )
    15         return 0;
    16       else
    17         return -1;
    18     }
    19     return ciCharCompare( *p.first, *p.second );
    20   }

    第二种方法 ciStringCompare 是产生一个合适的 STL 判断式:可以在关联容器中用作比较函数的函数,应用STL中名字第二长的算法 —— lexicographical_compare:

    1   bool ciCharLess( char c1, char c2 )
    2   {
    3     tolower( static_cast< unsigned char >(c1) < tower( static_cast< unsigned char >(c2) ) );
    4   }
    5   bool ciStringCompare( const string & s1, const string & s2 ) 6   { 7     return lexicographical_compare( s1.begin(), s1.end(), s2.begin(), s2.end(), ciCharLess ); 8   }

    一个完全不用 STL 实现一个忽略大小写字符串比较最简单的方式

    1   int ciStringCompare( const string & s1, const string & s2 )
    2   {
    3     return stricmp( s1.c_str(), s2.c_str() );
    4   }

      

  • 相关阅读:
    call_user_func和call_user_func_array的区别
    25行实现文件上传功能(PHP)
    PHP 结合MYSQL简单的实现了Todo List 功能
    向ASP.NET自定义控件中嵌入CSS资源
    模态子窗口不执行page_load
    oracle一次插入多条数据
    转载:数据库表结构设计方法及原则
    Js中的window.parent ,window.top,window.self
    在一个JS文件中包含中文字符串通过innerHTML输出后中文乱码
    转载:数据库表结构设计方法及原则
  • 原文地址:https://www.cnblogs.com/kidycharon/p/10042377.html
Copyright © 2020-2023  润新知