忽略大小写的字符串比较
来源:互联网 发布:cf2.0优化 编辑:程序博客网 时间:2024/05/21 15:56
忽略大小写字符串的比较这看起来是一个简单的问题。说容易也容易,说困难也困难,具体取决于你所要求的通用性怎么样,如果你不打算考虑国际化的问题,如果是类似于strcmp之类的功能那实现起来还算简单,如果需要考虑的话下面有几种简单的方法。下面的几种方法是我在effective STL中找到的,现在我把它们做一个总结。
方法一:使用STL的mismatch算法
<span style="font-size:18px;">int CompareChar(char c1,char c2){ int iC1 = tolower(static_cast<unsigned char>(c1)); int iC2 = tolower(static_cast<unsigned char>(c2)); if(iC1 < iC2) return -1; if(iC1 > iC2) return 1; return 0;}</span>
tolower函数的参数和返回值都是int但是除非该int是EOF,否则他的值必须可以用unsiged int来表示,在C和C++中char有可能是有符号的也有可能是无符号的,所以确定char是无符号的唯一办法是进行强制的转换,而且这也解释了为什么用int而不是用char来保存tolower的返回值了。
<span style="font-size:18px;">int CompareStringImpl(const string& s1,const string& s2);int CompareString(const string& s1,const string& s2){ if(s1.size() <= s2.size()) return CompareStringImpl(s1,s2); else return -CompareStringImpl(s2,s1);}int CompareStringImpl(const string& s1,const string& s2){ typedef pair<string::const_iterator,string::const_iterator>PSCI; PSCI p = mismatch(s1.begin(),s1.end(),s2.begin(),not2(ptr_fun(CompareChar))); if(p.first == s1.end()) { if(p.second == s2.end()) return 0; else return -1; } return CompareChar(*p.first,*p.second);}</span>
方法二:使用STL的lexicographical_compare算法
<span style="font-size:18px;">bool CharCompare(char c1,char c2){ return (tolower(static_cast<unsigned char>(c1)) < tolower(static_cast<unsigned char>(c2)));}bool StringCompare(const string& s1,const string& s2){ return !lexicographical_compare(s1.begin(),s1.end(),s2.begin(),s2.end(),CharCompare);}</span>
以上的方法在windows,Linux下都是通用的。
如果在windows平台下你不用考虑国际化的问题,并且你知道你的字符串中不会包含内嵌的空字符串,而且你不在乎移植性那么你可以用最简单的一种方式:
int CStringCompare(const string&s1,const string& s2)
{
return stricmp(s1.c_str(),s2.c_str());
}
就效率上说这个方法的效率确实要比前两个方法的效率要高。 0 0
- 忽略大小写的字符串比较
- 忽略大小写的字符串比较
- Python字符串比较忽略大小写的方法
- C++忽略大小写的字符串进行比较
- 宽字符串忽略大小写比较的实现
- Python字符串比较忽略大小写的方法
- 地域性与忽略大小写的字符串比较
- noi-8174-忽略大小写的字符串比较
- Python字符串比较忽略大小写的方法
- 16:忽略大小写的字符串比较
- 16.忽略大小写的字符串比较
- python 字符串比较忽略大小写的方法
- 字符串比较忽略全角半角,忽略大小写的方法
- 字符串比较 忽略大小写 iphone
- java 字符串忽略大小写比较
- Java 字符串忽略大小写比较
- 库函数--字符串比较--忽略大小写
- 忽略大小写比较字符串大小
- Fountation框架的简单使用
- Linux系统性能调优之性能分析
- tomcat在ubuntu中设置开机启动
- myeclipse10配置maven
- 适配器模式的理解
- 忽略大小写的字符串比较
- 获取已安装apk文件信息
- LeetCode Validate Binary Search Tree
- Apache Maven 使用 profile 和 filtering 实现多种环境下的资源配置管理(属性过滤)
- 转载 android 自定义view
- 用图片撑开的div,里面的input标签在三星手机不生效解决办法
- Hibernate 主键生成策略
- B树算法与实现
- 编写maven插件的时候,简化插件的输入命令方法