7-48 字符串循环左移_ append()erase()用法

输入一个字符串和一个非负整数N,要求将字符串循环左移N次。

输入格式:
输入在第1行中给出一个不超过100个字符长度的、以回车结束的非空字符串;第2行给出非负整数N。

输出格式:
在一行中输出循环左移N次后的字符串。

输入样例:

Hello World!
2

输出样例:

llo World!He

知识点

分析from

  1. 非负整数N,说明有N=0的情况,如果N=0,输出原字符串
  2. 循环左移,左移说明从第一个字符开始删除N个字符,循环说明要判定N是否大于字符串长度,如果N小于字符串长度,那么左移N个字符,如果N大于字符串长度,那么容易想到的是取R=N%字符串长度,左移R个字符,如果N等于字符串长度,输出原字符串
  3. 这是大部分人一开始容易忽略的细节:输入样例包括空格!故C++可以使用getline来接受空格。
  4. 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];
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DDouble-

你的鼓励是我最大的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值