【发布时间】:2010-12-02 03:18:24
【问题描述】:
我有 2 个 std::string。我只想,给定输入字符串:
- 每个字母都大写
- 将大写字母分配给输出字符串。
这是怎么回事:
std::string s="hello";
std::string out;
std::transform(s.begin(), s.end(), std::back_inserter(out), std::toupper);
但这不会(导致程序崩溃)?
std::string s="hello";
std::string out;
std::transform(s.begin(), s.end(), out.begin(), std::toupper);
因为这行得通(至少在同一个字符串上:
std::string s="hello";
std::string out;
std::transform(s.begin(), s.end(), s.begin(), std::toupper);
【问题讨论】:
-
在我的情况下(gcc 4.7),这些示例都无法正确编译,我猜是因为
std::toupper已被两个参数变体重载(由locale.h提供)。我必须明确地投射它:std::transform(s.begin(), s.end(), s.begin(), (int(*)(int))std::toupper);