C++忽略字符大小写比较
在项目中用到对两个字符串进行忽略大小写的比较,有两个方法实现
1、使用C++提供的忽略大小写比较函数实现
代码实现:
/*
功能 :忽略大小写进行字符串比较
*/ #ifdef __LINUX__
#include <strings.h>
#endif
#include <iostream>
#include <string>
#include <string.h> using namespace std; int main(int argc, char *argv)
{
string strSrc = "Hello, World";
string strDes = "Hello, world";
#ifdef __LINUX__
if (strcasecmp(strSrc.c_str(), strDes.cStr()) == )
{
cout << strSrc << " 等于 " << strDes << endl;
}
else
{
cout << strSrc << " 不等于 " << strDes << endl;
}
#else
if (stricmp(strSrc.c_str(), strDes.c_str()) == )
{
cout << strSrc << " 等于 " << strDes << endl;
}
else
{
cout << strSrc << " 不等于 " << strDes << endl;
}
#endif
return ;
}
使用到的函数不是C++标准库中的函数,windows和Linux下各有不同的实现,所以使用宏定义进行处理实现跨平台
stricmp是windows下提供的函数
strcasecmp是Linux下提供的函数,使用时需要包含头文件strings.h
2、使用toupper函数或者tolower函数将字符串统一转换为大写或小写然后比较
这种方法不用考虑跨平台的问题,因为使用的是C++标准库中的函数实现的。
代码实现:
/*
* 文件名 : main.cpp
* 功能 : 将字符串转换为大写,使用transform函数
*
*/
#include <iostream>
#include <algorithm> using namespace std; int main(int argc, char **argv)
{
string strTest = "use test.";
transform(strTest.begin(), strTest.end(), strTest.begin(), toupper); for (size_t i = ; i < strTest.size(); i++)
{
cout << strTest[i];
}
cout << endl; return ;
}
此示例代码仅实现了转换为大写,并未比较,里面使用到了STL中algorithm头文件中的一个算法transform,它的用法参见:http://www.cplusplus.com/reference/algorithm/transform/
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
此处第二种方法的代码在Linux下会出错误,需要修改第14行为:
transform(strTest.begin(), strTest.end(), strTest.begin(), ::toupper);
参考:
http://blog.csdn.net/delphiwcdj/article/details/6890668
http://forums.codeguru.com/showthread.php?489969-no-matching-function-transform
---------------------------------------------------------------------------------------------------------------------------------------------------
transform定义:http://www.cplusplus.com/reference/algorithm/transform/
| unary operation(1) |
template <class InputIterator, class OutputIterator, class UnaryOperation> |
|---|---|
| binary operation(2) |
template <class InputIterator1, class InputIterator2, |
显然,我们使用的是第一个,也就是需要传递一个一元运算符,而
std::toupper用法:
template< class charT >
charT toupper( charT ch, const locale& loc );
参考:http://en.cppreference.com/w/cpp/locale/toupper
int toupper( int ch );
参考:http://en.cppreference.com/w/cpp/string/byte/toupper
C++忽略字符大小写比较的更多相关文章
- lintcode :sort letters by case字符大小写排序
题目 字符大小写排序 给定一个只包含字母的字符串,按照先小写字母后大写字母的顺序进行排序. 您在真实的面试中是否遇到过这个题? Yes 样例 给出"abAcD",一个可能的答案为& ...
- apache mod_speling.so 忽略URL大小写(自动纠错)
apache mod_speling.so 忽略URL大小写(自动纠错) 打开配置文件 httpd.conf 加入 LoadModule speling_module modules/mod_spe ...
- vim编辑器的使用技巧——忽略字母大小写
一忽略字母大小写临时生效 底行模式 底行模式下输入set ic 注意ic是ignorecase的缩写 命令模式 命令模式进行关键字搜索 二忽略字母大小写永久生效 保存到配置文件里面,默认是没有此配置 ...
- 读书笔记——Windows环境下32位汇编语言程序设计(9)ANSII字符大小写转大写
在罗云彬的<Windows环境下32位汇编语言程序设计>中第321页 ... .const szAllowedChar db '0123456789ABCDEFabcdef',08h .. ...
- IDEA项目搭建十一——添加拦截器、忽略URL大小写、启动事件
程序启动时如果需要添加某些初始化代码可以使用以下事件处理 import org.springframework.context.ApplicationEvent; import org.springf ...
- C# 去重处理字符大小写
本文展示了如何对集合去重并且处理大小写
- PHP字符串word末字符大小写互换
要求 给出一个字符串如 “A journey of, a thousand 'miles' must can't \"begin\" with a single step.” ,通 ...
- 位运算处理字符大小写转换 - 关联Leetcode 709. 转成小写字母
大写变小写.小写变大写 : 字符 ^= 32; 大写变小写.小写变小写 : 字符 |= 32; 小写变大写.大写变大写 : 字符 &= -33; 题目 实现函数 ToLowerCase(),该 ...
- mysql西文字符大小写重复键问题的解决方法
ä和a插入到唯一键时总提示重复 总提示:Duplicate entry 'a' for key 'name' 后来发现我用的COLLATE是utf8_general_ci,改为utf8_bin即可,命 ...
随机推荐
- cpu gpu数据同步
https://developer.apple.com/documentation/metal/advanced_command_setup/cpu_and_gpu_synchronization d ...
- 在Eclipse中点击ctrl+h打开搜索界面,范围指定的项目中搜索包含person的文件
ctrl+h ===>File Search Tab ===>在containing text里输入person,scope ==>selected resources,搜索就可以了
- 基于Thrift的跨语言、高可用、高性能、轻量级的RPC框架
功能介绍 跨语言通信 方便的使Java.Python.C++三种程序可以相互通信 负载均衡和容灾处理 方便的实现任务的分布式处理 支持服务的水平扩展,自动发现新的服务节点 能够兼容各种异常情况,如节点 ...
- java中的Iterator接口
Iterator接口 Iterator接口也是Java集合框架的成员,但它与Collection系列.Map系列的集合不一样:Collection系列集合.Map系列集合主要用于盛装其他对象,而Ite ...
- 视频质量评价方法:VQM
如何确定一个视频质量的好坏一直以来都是个棘手的问题.目前常用的方法就是通过人眼来直接观看,但是由于人眼的主观性及观看人员的单体差异性,对于同样的视频质量,不同的人的感受是不一样的.为此多个研究机构提出 ...
- 大并发server架构 && 大型站点架构演变
server的三条要求: 高性能:对于大量请求,及时高速的响应 高可用:7*24 不间断,出现问题自己主动转移.这叫fail over(故障转移) 伸缩性:使用跨机器的通信(TCP) 另外不论什么网络 ...
- android项目解刨之时间轴
近期开发的app中要用到时间轴这东西.须要实现的效果例如以下: 想想这个东西应该能够用listview实现吧. 然后近期就模拟着去写了: 首先写 listview的item的布局: listview ...
- Tomcat日志、项目中的log4j日志、e.printStackTrace()——我的日志最后到底跑哪去了?
1.Tomcat自带日志功能,即时你的项目中有log4j也不会影响到Tomcat自己记录日志. 2.你的项目中的log4j中的日志指定打印到什么地方(控制台或者文件),便会打印到什么地方,和Tomat ...
- CentOS修复grub
grub启动项损坏无法进入系统. 进入grub模式(可借助安排盘rescue后在shell中输入grub). 一: 通过下面三个命令中的一个.找到正确的grub位置. 1. find ...
- Linux的定时器
在服务端程序设计中,与时间有关的常见任务有: 获取当前时间,计算时间间隔: 定时操作,比如在预定的时间执行一项任务,或者在一段延时之后执行一项任务. Linux 时间函数 Linux 的计时函数,用于 ...