题解 | #字符串变形#

字符串变形

https://www.nowcoder.com/practice/c3120c1c1bc44ad986259c0cf0f0b80e

#include <algorithm>
#include <string>
class Solution {
public:
    string trans(string s, int n) {
        // write code here
        if(n==0) return s;
        string temp;
        //大小写转换
        for(int i=0;i<n;i++){
            if(s[i]<='Z'&&s[i]>='A'){
                temp+=s[i]-'A'+'a';
            }
            else if(s[i]<='z'&&s[i]>='a'){
                temp+=s[i]-'a'+'A';
            }
            else{
                temp+=s[i];
            }
        }
        //整体翻转字符串temp
        reverse(temp.begin(),temp.end());
        //以空格为界,分别翻转每一个单词
        for(int i=0;i<n;i++){
            int j=i;
            while(j<n&&temp[j]!=' ') j++;
            reverse(temp.begin()+i,temp.begin()+j);
            i=j;
        }
        return temp;
    }
};

在C++中,string类型的变量是一种动态数组类型,因此可以用下标访问其中的字符。但是,当我们尝试使用 `res[i] = s[i] - 'A' + 'a';`的方式进行字符串拼接时,如果字符串res的长度不够,就会产生访问越界的问题。

因此,正确的做法是利用string类提供的成员函数`+=`(也可以使用append方法),将要拼接的字符逐一添加到字符串的末尾,从而避免了访问越界的风险。即代码中的 `res += s[i] - 'A' + 'a';` 等价于 `res.push_back(s[i] - 'A' + 'a');`。

另外,需要注意的是,`+=` 和 `append` 都是非常高效的字符串拼接方法,使用它们通常比手动循环实现的性能更好。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务