ramlife

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

问题

今天在使用 transform 转换大小写的时候,转换不正确,没有结果。

原因

出问题的代码为: std::transform(src.begin(), src.end(), dest.begin(), ::toupper); 经过分析,因为源和目的不是同一个字符串,当目的字符串 size() 不够就会出现这种情况,就算 capacity() 够也不行,因为只有 size() 范围内的才是可以被下标访问的。

解决

在 transform 之前增加判断,判断两个字符串是否是同一个,是否 size 不够。

if (dest != src && dest.size() < src.size()) {}

参考:

C++中resize和reserve的区别
https://blog.csdn.net/yishizuofei/article/details/95456364

posted on 2023-02-08 18:13  ramlife  阅读(44)  评论(0编辑  收藏  举报