【发布时间】:2014-11-04 22:26:40
【问题描述】:
字符串的转换可以用
std::transform(s.begin(), s.end(), s.begin(), ::toupper);
但是将其转换为新的修改副本的最佳方法是什么?
试过了:
string s1="text",s2;
std::transform(s1.begin(), s1.end(), s2.begin(), ::toupper);
但它在运行时因“分段错误”而失败
我设法做到了:
string s1="text",s2;
s2 = s1;
std::transform(s2.begin(), s2.end(), s2.begin(), ::toupper);
当然,您可以创建一个逐个字符的函数,但我认为这不是最佳的,而且我没有从中学到任何东西......
【问题讨论】:
-
你需要
std::back_inserter()。 -
您应该使用
std::toupper并确保如果char已签名,则不会将负值传递给它,以免您有未定义的行为。 -
@chris 这个例子实际上是从cppreference 站点复制粘贴的,所以 std::string 可以有无符号字符或负值吗?
-
@Columbo 你为什么删除你的答案?
-
@clickstefan 因为我不喜欢它。我发布了帮助答案,但认为它没有帮助。
标签: c++