返回null char数组,重写Java的String.toUpperCase()

时间:2014-03-18 13:29:48

标签: c++ string cstring

我原来是一名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);
}

1 个答案:

答案 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);
});