【问题标题】:why the result is nothing for this code sample about string toupper? [duplicate]为什么这个关于字符串 toupper 的代码示例的结果是什么? [复制]
【发布时间】:2013-05-04 19:06:45
【问题描述】:
string str("fujian");
string newstr;
transform(str.begin(), str.end(), newstr.begin(), ::toupper);
cout << newstr << endl;

为什么这个关于字符串 toupper 的代码示例没有结果?

【问题讨论】:

    标签: c++ string


    【解决方案1】:

    您的代码超出了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 也有潜在的未定义行为。
    【解决方案2】:

    你没有为newstr分配任何空间。

    在此处查看更多信息:C++ std::transform() and toupper() ..why does this fail?

    【讨论】:

    • 但是newstr是"",不是吗?
    • @jiafu 阅读 deepdownunder2222 提供的链接。 std::transform 无法放大 newstr,所以空间不足。
    猜你喜欢
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 2013-03-10
    相关资源
    最近更新 更多