输入一个字符串和一个非负整数N,要求将字符串循环左移N次。
输入格式:
输入在第1行中给出一个不超过100个字符长度的、以回车结束的非空字符串;第2行给出非负整数N。
输出格式:
在一行中输出循环左移N次后的字符串。
输入样例:
Hello World!
2
输出样例:
llo World!He
知识点
- 非负整数N,说明有N=0的情况,如果N=0,输出原字符串
- 循环左移,左移说明从第一个字符开始删除N个字符,循环说明要判定N是否大于字符串长度,如果N小于字符串长度,那么左移N个字符,如果N大于字符串长度,那么容易想到的是取R=N%字符串长度,左移R个字符,如果N等于字符串长度,输出原字符串
- 这是大部分人一开始容易忽略的细节:输入样例包括空格!故C++可以使用getline来接受空格。
- append():append函数是向string的后面追加字符或字符串。
erase():删除
1).向string的后面加C-string
string s ="hello ";
const char *c = "out here ";
s.append(c); // 把c类型字符串s连接到当前字符串结尾
s = "hello out here";
2).向string的后面加C-string的一部分
string s="hello ";
const char *c = "out here ";
s.append(c,3); // 把c类型字符串s的前n个字符连接到当前字符串结尾
s = "hello out";
3).向string的后面加string
string s1 = "hello ";
string s2 = "wide ";
string s3 = "world ";
s1.append(s2);
s1 += s3; //把字符串s连接到当前字符串的结尾
s1 = "hello wide ";
s1 = "hello wide world ";
4).向string的后面加string的一部分
string s1 = "hello ",s2 = "wide world ";
s1.append(s2, 5, 5); 把字符串s2中从5开始的5个字符连接到当前字符串的结尾
s1 = "hello world";
string str1 = "hello ", str2 = "wide world ";
str1.append(str2.begin()+5, str2.end()); //把s2的迭代器begin()+5和end()之间的部分连接到当前字符串的结尾
str1 = "hello world";
5).向string后面加多个字符
string s1 = "hello ";
s1.append(4,'!'); //在当前字符串结尾添加4个字符!
s1 = "hello !!!!";
代码一
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s,t;
int N,R;
getline(cin,s);
cin>>N;
if(N>0&&N<s.length()) //0--2 t=He ; s=llo World! ; s=llo World!He
{ //切除 存储 ; 删除 ; 拼接
t.append(s,0,N);/*对临时字符串t追加s中的从下标0开始的N个字符*/
s.erase(0,N);/*删除s中的从下标0开始的N个字符*/
s.append(t);/*对s追加临时字符串t*/
}
else if(N>s.length())
{
R=N%s.length();/*取余*/
t.append(s,0,R);
s.erase(0,R);
s.append(t);
}
cout<<s;
return 0;
}
AC代码
但是暂时还不太懂什么意思
代码来源
#include <iostream>
#include <string>
using namespace std;
int main() {
string Ori;
getline(cin, Ori); //得到原始字符串
int N;
cin >> N; //得到左移位数
N = N % Ori.size(); //当N超过原始字符串的长度时
string Tmp1(Ori, N, Ori.size()); //剪切后半段得到第一个字符串
string Tmp2(Ori, 0, N); //剪切前半段得到第二个字符串
Ori = Tmp1 + Tmp2; //拼接得到结果字符串
cout << Ori;
return 0;
}
自己的代码
#include<iostream>
#include<cstring>
using namespace std;
int main(){
string str;
getline(cin,str);
int n;cin>>n;
int len=str.size();
n=n%len;
for(int i=0;i<len;i++){
cout<<str[(i+n)%len];
}
}