c++ - 重写 Java 的 String.toUpperCase() 返回空字符数组

标签 c++ string cstring

<分区>

我本来是一名Java程序员,我非常喜欢语法,尤其是String对象。使用 C++,我尝试重新创建 Java 具有的 toUpperCase() 方法。唯一的问题是它总是返回一个具有空/NULL 字符数组的 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);
}

最佳答案

你的尝试有一些内存问题,还有一个逻辑问题。返回大写字符的字符串拷贝所需要做的就是:

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

关于c++ - 重写 Java 的 String.toUpperCase() 返回空字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22480908/

相关文章:

c++ - 如何使用指针程序进行句子反转以停止打印出乱码?

c# - 将 CString 数组转换为 System::String

c++ - 在模板中实例化模板对象

c++ - 将 `boost::tuple` 转换为 `boost::fusion::tuple`

c++ - 我可以创建 map <string,map<string, int[2]>> 吗?

java - String.format() 抛出 FormatFlagsConversionMismatchException

c++ - String is not null terminated 错误

c++ - 重载 char* 和 std::string 是否安全?

计算文本输入中的不同单词

c - 输出中的双数组字符串互连 - C 编程