问题
今天在使用 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
浙公网安备 33010602011771号