方案:灵活运用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 讲的还是很明白的!
网友评论