我原来是一名Java程序员,我非常喜欢这种语法,特别是关于String
对象。使用C ++,我尝试重新创建Java所具有的toUpperCase()
方法。唯一的问题是它总是返回一个具有空/ NULL char数组的String
对象。
String String::toUpperCase()
{
char *a = new char[this->length + 1];
memset(a, 0, this->capacity + 1);
memcpy(a, this->characters, this->length);
for (int i = 0; i < strlen(this->characters); i++)
{
toupper(a[i]);
}
return *new String(a);
}
答案 0 :(得分:2)
您的尝试存在一些内存问题,也存在逻辑问题。所有你需要返回字符串为大写的字符串的副本是:
std::string str = "My Original string";
std::string myCopy(str);
std::locale loc;
std::transform(myCopy.begin(), myCopy.end(), myCopy.begin(), [&](char c)
{
return std::toupper(c, loc);
});