如何忽略大小写比较字符串.pdf

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
如何忽略大小写比较字符串

如何忽略大小写比较字符串 Matt Austern 著 hotman_x 译 如何忽略大小写比较字符串 Matt Austern 著 hotman_x 译 hotman_x 曰:趁春节这几天,乱翻一气,也有翻不出来写原文的,也有“以意逆志”乱猜的,总之,姑 妄译之,如果有兴趣,不妨姑妄读之。 --2006.02.05 如果你写过用到了字符串的程序 (谁没写过?),就有可能遇到过这种情 况:视 个仅大小写有差异的字符串为相同。也就是说,你会需要无视大小写 的相等性比较、小于比较、子串匹配、排序。而且,说真的,关于标准C++库 最常见的问题之一就是 “如何忽略大小写比较字符串”。这个问题被问了很多 次,而且被答错了很多次。 首先,你可能正在琢磨写一个 “大小写无关字符串类”的法子,让我们来 看看:是 的,这在技术上是多少还是有点可能性的。标准库类型 std::string其实不过是这个模板的别名:std::basic_stringchar, std::char_traitschar, std::allocatorchar 。它用traits 参数进行所有的比较,即:提供 “重新定义好的进行相等性比较、小于比较” 的traits 参数,你就可以以此方式来实例化basic_string,这样一来, 和==运算符就是大小写无关的了。你可以这么干,但是如此伤神实在划不来: • 你没法做I/O——至少不吃点苦头是做不了。标准库中的I/O类,如 std::basic_istream 和 std::basic_ostream , 也 和 std::basic_string 一样,是用字符类型及相关traits 来参数化的。 (再 说 一 次 , std::ostream 仅 仅 是 它 的 别 名 : std::basic_ostreamchar, char_traitschar 。 )Traits 参数必须完全 匹配。如果你 的字符 串用 的是 std::basic_stringchar, my_traits_class ,那么你的流输 出 就 得 相 应 的 用 std::basic_ostreamchar, my_traits_class,这么一来,你就不能用cin、cout这样常用的 1 如何忽略大小写比较字符串 Matt Austern 著 hotman_x 译 流对象。 • “大小写无关”这个特性其实与对象无涉,而是与 “如何使用对象 ”相关。你可能非常需要在此处不关心大小写而在彼处关心 (比如说 “ 大小写无关”是一个用户控制的选项)。为这 种情况搞出 个单独的 类型出来,实在是在这两者之间不必要的人为设限。 • 不大恰当。同其它traits 类 一样,char_traits是一个小巧、1 简单、无状态的类。在后面的讨论中我们会看到,能正确的进行大小写 无关比较的类决不可能具有这样的特性。 • 不充分。即使所有basic_string 的成员函数都大小写无关了,当 你 需 要 用 一 个 非 成 员 的 泛 型 算 法 (如 std::search 和 std::find_end)时还是用不上劲。如果为了提高效率,你决定将容纳 basic_string对象的容器换成字符串表格,你又用不上劲。 更好的解决之道,也是更符合标准库习惯的解决之道,应该是:在需要时 明 确 的 要 求 进 行 大 小 写 比较 。 象 string::find_first_of 和 st

文档评论(0)

wnqwwy20 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:7014141164000003

1亿VIP精品文档

相关文档