在C ++中将字符串降到较低/较高

时间:2020-03-05 18:39:42  来源:igfitidea点击:

人们发现在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()。