这里写目录标题
1 问题来源
把一个string转换成大写或者小写,是项目中经常需要做的事情,但string类里并没有提供这个方法。
2 解决
通过C++库函数transform()
可以很容易解决。
下面是vc中的定义,可能有些不同,实际上都是一样的。
参数分别是:输入string的开始
,输入string的结束
,输出string的开始
,转换函数
_CONSTEXPR20 _OutIt transform(const _InIt _First, const _InIt _Last, _OutIt _Dest, _Fn _Func)
转换函数,比如:::toupper
, ::tolower
输出string的开始:如果输入是const ,需要临时定义一个string,而且要预先分配空间。
std::string out;
out.resize(value.size());
3 案例-判断输入是CPU还是GPU
static bool ValidatePort(const char* flagname, const std::string& value) {
std::string out;
out.resize(value.size());
transform(value.begin(), value.end(), out.begin(), ::toupper);
if (out=="CPU" || out=="GPU")
return true;
else
throw std::logic_error("Parameter -d must CPU or GPU");
}