如何将一个字符串转换为大写字母。我在谷歌上找到的例子只涉及到字符。
struct convert {
void operator()(char& c) { c = toupper((unsigned char)c); }
};
// ...
string uc_str;
for_each(uc_str.begin(), uc_str.end(), convert());
注意:上面的解决方案有几个问题。
21.5空尾序列实用程序
这些头文件的内容应与标准C库头文件<ctype.h>、<wctype.h>、<string.h>、<wchar.h>和<stdlib.h> [...]
这意味着cctype
成员很可能是不适合在标准算法中直接使用的宏。
同一个例子的另一个问题是,它没有对参数进行铸造,也没有验证这个参数是否为非负值;这对于普通的`char'被签名的系统来说特别危险。(原因是:如果这是作为一个宏来实现的,它可能会使用一个查找表,而你的参数会被索引到这个表中。负数的索引会给你带来UB)。