【发布时间】:2013-05-04 19:06:45
【问题描述】:
string str("fujian");
string newstr;
transform(str.begin(), str.end(), newstr.begin(), ::toupper);
cout << newstr << endl;
为什么这个关于字符串 toupper 的代码示例没有结果?
【问题讨论】:
string str("fujian");
string newstr;
transform(str.begin(), str.end(), newstr.begin(), ::toupper);
cout << newstr << endl;
为什么这个关于字符串 toupper 的代码示例没有结果?
【问题讨论】:
您的代码超出了newstr 的结尾,因此具有undefined behaviour。
请尝试以下任一方法:
// version 1
string str("fujian");
string newstr(str);
transform(newstr.begin(), newstr.end(), newstr.begin(), ::toupper);
cout << newstr << endl;
// version 2
string str("fujian");
string newstr;
transform(str.begin(), str.end(), std::back_inserter(newstr), ::toupper);
cout << newstr << endl;
【讨论】:
char 作为参数调用::toupper 也有潜在的未定义行为。
你没有为newstr分配任何空间。
在此处查看更多信息:C++ std::transform() and toupper() ..why does this fail?
【讨论】:
std::transform 无法放大 newstr,所以空间不足。