在C ++中将字符串降到较低/较高
人们发现在C ++中将String转换为小写/大写的最佳方法是什么?
由于C ++不是仅英语的编程语言,因此使问题变得复杂。有没有好的多语言方法?
解决方案
回答
#include <algorithm> std::string data = "Abc"; std::transform(data.begin(), data.end(), data.begin(), ::toupper);
http://notfaq.wordpress.com/2007/08/04/cc-convert-string-to-upperlower-case/
另外,有关常见字符串方法的CodeProject文章:http://www.codeproject.com/KB/stl/STL_string_util.aspx
回答
我们还应该查看此问题。基本上,问题在于标准C / C ++库不是为处理Unicode数据而构建的,因此我们将不得不考虑其他库。
这可能会随着C ++标准的更新而改变。我知道Borland的下一个编译器(CodeGear)将具有Unicode支持,并且我猜想Microsoft的C ++编译器将具有或者已经具有支持Unicode的字符串库。
回答
正如Darren告诉那样,最简单的方法是使用std :: transform。
但是请注意,以某种语言(例如德语)为例,小写和大写之间并不总是存在一对一的映射关系。小写的" esset"字符(看起来像希腊字符beta)大写转换为" SS"。
回答
> std::string data = “Abc”; > std::transform(data.begin(), data.end(), data.begin(), ::toupper);
这将起作用,但是将使用标准的" C"语言环境。如果我们需要降低其他区域的语言环境,则可以使用构面。上面使用构面的代码为:
locale loc(""); const ctype<char>& ct = use_facet<ctype<char> >(loc); transform(str.begin(), str.end(), std::bind1st(std::mem_fun(&ctype<char>::tolower), &ct));
回答
史蒂夫说的是对的,但是我想如果代码必须支持多种语言,则可以有一个工厂方法,该方法封装了一组基于该语言执行相关的toUpper或者toLower的方法。
回答
对于希望使用Nic Strong答案的复制粘贴程序,请注意" use_factet"中的拼写错误以及std :: transform缺少的第三个参数:
locale loc(""); const ctype<char>& ct = use_factet<ctype<char> >(loc); transform(str.begin(), str.end(), std::bind1st(std::mem_fun(&ctype<char>::tolower), &ct));
应该
locale loc(""); const ctype<char>& ct = use_facet<ctype<char> >(loc); transform(str.begin(), str.end(), str.begin(), std::bind1st(std::mem_fun(&ctype<char>::tolower), &ct));
回答
如果我们拥有Boost,那么它具有最简单的方法。看一下Boost字符串算法中的to_upper()/ to_lower()。