//使用宽字符集,重写了一些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_ */