在一个表达式中提升to_upper char指针

时间:2011-03-17 17:59:15

标签: c++ string boost

是否可以执行以下操作:

const char* str = "AaBbCc";
string str_up = boost::to_upper_copy(str); // str_up will be "AABBCC"

最后一行无法编译。

当然我可以如下,但它不那么“规范”:

const char* str = "AaBbCc";

string str_up = str;
boost::to_upper(str_up);

3 个答案:

答案 0 :(得分:5)

to_upper_copy的声明是:

template<typename SequenceT> 
SequenceT to_upper_copy(const SequenceT &, const std::locale & = std::locale());

由此可以清楚地看出SequenceT不能是指向char,甚至是char数组的指针,因为返回的副本可能具有相同类型的方式没有(好)。

您可以明确强制类型为string

string str_up = boost::to_upper_copy<string>(str); 

以下是文档中SequenceTRangeT的含义:String Representation。简而言之,const char*RangeT参数都不能接受数组(char [X])。

答案 1 :(得分:3)

为什么不发布正确的解决方案作为问题的答案?

 const char* str = "AaBbCc";
 std::string str_up = boost::to_upper_copy(std::string(str));

致康拉德的信用。

答案 2 :(得分:2)

当然!

inline std::string to_upper_copy(std::string const & src) {
   std::string res(src);
   boost::to_upper(res);
   return res;
}