美文网首页
剑指offer 58-翻转字符串

剑指offer 58-翻转字符串

作者: 千千鱼 | 来源:发表于2018-05-12 09:31 被阅读0次

方案:灵活运用C++中的erase函数,insert函数,append函数

注:str.push_back() 一次只能输入一个字符,而append能够在末尾添加个字符串,个人认为和str+str2是一个效果。

  • 需要注意的问题,当str为空字符串的时候!

我自己的代码

class Solution {
public:
    string LeftRotateString(string str, int n) {
        if(str.size()==0)
            return str;
        if(n==0)
            return str;
        n=n%str.size();
        string temp;
        for(int i=0;i<n;i++){
            temp.push_back(str[i]);
        }  //在后来的思考中,str部分赋值可用  temp.assign(str,0,n); 替代,注意不是迭代器,而是int 型索引哦!
        str.erase(str.begin(),str.begin()+n);
        str.append(temp);
        return str;
    }
};

其他人的666的代码

//链接:[https://www.nowcoder.com/questionTerminal/12d959b108cb42b1ab72cef4d36af5ec](https://www.nowcoder.com/questionTerminal/12d959b108cb42b1ab72cef4d36af5ec)
//来源:牛客网

class Solution {

public:

string LeftRotateString(string str, int n) {

int len = str.length();

if(len == 0) return "";

n = n % len;

str += str;

return str.substr(n, len);

}

};
  • 突然想到,一直受str赋值成另一str的子部分困扰, 现在想来,用str.copy()应该可以:int copy(char *s, int n, int pos = 0) const;//把当前串中以pos开始的n个字符拷贝到以s为起始位置的字符数组中,返回实际拷贝的数目 //但是只能copy到字符数组中去!而不是copy到字符串。

  • 受到启发,用s.substr()函数,或者assign()函数应该也可以。

  • 首先讲赋值,第一个赋值方法当然是使用操作符=,新值可以是string(如:s=ns) 、c_string(如:s=”gaint”)甚至单一字符(如:s='j')。还可以使用成员函数assign(),这个成员函数可以使你更灵活的对字符串赋值。还是举例说明吧:
    s.assign(str); //不说
    s.assign(str,1,3);//如果str是”iamangel” 就是把”ama”赋给字符串
    s.assign(str,2,string::npos);//把字符串str从索引值2开始到结尾赋给s
    s.assign(“gaint”); //不说
    s.assign(“nico”,5);//把'n' ‘I' ‘c' ‘o' ‘/0'赋给字符串
    s.assign(5,'x');//把五个x赋给字符串

  • 题取子串的函数是:substr(),形式如下:
    s.substr();//返回s的全部内容
    s.substr(11);//从索引11往后的子串
    s.substr(5,6);//从索引5开始6个字符

  • string 模板库 博客 https://blog.csdn.net/fdqw_sph/article/details/54233971 讲的还是很明白的!

相关文章

网友评论

      本文标题:剑指offer 58-翻转字符串

      本文链接:https://www.haomeiwen.com/subject/ddjcdftx.html