狂奔的蜗牛

通过计算机成就人生

C++博客 首页 新随笔 联系 聚合 管理
  10 Posts :: 0 Stories :: 1 Comments :: 0 Trackbacks

//使用宽字符集,重写了一些string类里面有所欠缺的方法,都是为了忽略大小写而做的。
/*
 * Utils.h
 *
 *  Created on: 2010-1-9
 *      Author: dream
 
*/

#ifndef UTILS_H_
#define UTILS_H_
#include 
<iostream>
#include 
<fstream>
#include 
<string>
#include 
<cstddef>
/**
 *常用工具类
 
*/
class StringUtil: char_traits<wchar_t> {

public:
    
/**
     *将字符串转换成小写
     
*/
    
static const string toLowerCase(string& s) {
        
string lower(s);
        
for (size_t i = 0; i < s.length(); ++i) {
            lower[i] 
= tolower(lower[i]);
        }
        
return lower;
    }

    
/**
     * 将字符串转换成大写
     
*/
    
static const string toUpperCase(string& s) {
        
string upper(s);
        
for (size_t i = 0; i < s.length(); ++i) {
            upper[i] 
= toupper(upper[i]);
        }
        
return upper;
    }
    
/*以下将对一些string类的方法重载,以提供忽略大小写的方法*/
    
///////////////////////////////////////////////////////////////////////

    
static const bool eq(wchar_t c1st, wchar_t c2nd) {
        
return towupper(c1st) == towupper(c2nd);
    }
    
static const bool ne(wchar_t c1st, wchar_t c2nd) {
        
return towupper(c1st) == towupper(c2nd);
    }
    
static const bool lt(wchar_t c1st, wchar_t c2nd) {
        
return towupper(c1st) < towupper(c2nd);
    }

    
/**
     *str1 > str2 返回 1
     *str1 < str2 返回 -1
     *str1 = str2 返回 0
     
*/
    
static const int compare(const wchar_t* str1, const wchar_t* str2, size_t n) {
        
for (size_t i = 0; i < n; i++) {
            
if (str1 == 0) {
                
return -1;
            } 
else if (str2 == 0) {
                
return 1;
            } 
else if (towlower(*str1) < towlower(*str2)) {
                
return -1;
            } 
else if (towlower(*str1) > towlower(*str2)) {
                
return 1;
            }
            assert(towlower(
*str1) == towlower(*str2));
            
++str1;
            
++str2;

        }
        
return 0;
    }

    
/**
     * 忽略大小写查找指定字符串,返回的是16进制的值
     *
     * 因为gcc默认使用char或者string类型,所以出入第一个参数的时候需要进行强制类型转换
     *
     * @Param wchar_t* s1 : 待查找的字符串
     * @Param size_t n: 从第N位开始查找
     * @Param wchar_t c:被查找的对象
     
*/
    
static const wchar_t* find(const wchar_t* s1, size_t n, wchar_t c) {
        
while (n-- > 0) {
            
if (towupper(*s1) == towupper(c))
                
return s1;
            
else
                
++s1;
        }
        
return 0;
    }
};
#endif /* UTILS_H_ */
posted on 2010-01-10 20:33 幽梦还乡 阅读(1460) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理