洛谷【入门5】字符串1-7题答案

目录

1、P5733 【深基6.例1】自动修正

2、P1914 小书童——凯撒密码

3、P1125 [NOIP2008 提高组] 笨小猴

4、P1957 口算练习题

5、P5015 [NOIP2018 普及组] 标题统计

6、P5734 【深基6.例6】文字处理软件

7、P1308 [NOIP2011 普及组] 统计单词数


前言:

C语言:                                                                                   C++:

头文件:#include<cstring>                                                     头文件:#include<string>

定义字符串:char c[100];                                                     定义字符串:string s;

获取带空格的输入:cin.getline(c,100);                                   获取带空格的输入:getline(cin,s);

求字符串的长度:strlen();                                               求字符串的长度:s.size();

1、P5733 【深基6.例1】自动修正

#include<bits/stdc++.h>
using namespace std;
int main(){
	string a;
	cin>>a;//getline(cin,s);
	for(int i=0;i<a.size();i++){
		if(a[i]>='a'&&a[i]<='z'){
			a[i]-=32;//a[i]=a[i]-'a'+'A';
		}
	}
	cout<<a;
	return 0;
}

2、P1914 小书童——凯撒密码

#include<bits/stdc++.h>
using namespace std;
int main(){
	int a,s[20000];
	cin>>a;
	char b[20000];
	cin>>b;
	for(int i=0;i<strlen(b);i++){
		s[i]=b[i];
	}
	for(int i=0;i<strlen(b);i++){
		s[i]=s[i]+a;
		if(s[i]>'z'){
			s[i]='a'+(s[i]%'z')-1;//当s[i]=z+1时,应该返回a。
		}
	}
	for(int i=0;i<strlen(b);i++){
		b[i]=s[i];
		cout<<b[i];
	}
	return 0;
}
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
string s;
cin>>n>>s;
for(int i=0;i<s.length();i++){
	s[i]=(s[i]-'a'+n)%26+'a';
//s[i]-'a'字母表的相对位置
}
cout<<s;
return 0;
}

3、P1125 [NOIP2008 提高组] 笨小猴

#include<bits/stdc++.h>
using namespace std;

bool f(int q){
	if(q<2){
		return false;
	}
	for(int i=2;i<sqrt(q);i++){
		if(q%i==0){
			return false;
		}
	}
	return true;
}//判断max-min是否是质数

int main(){
	char a[102],b[30];
	int c[30],d[30];
	cin>>a;
	for(int i=0;i<26;i++){
		int ans=0;//循环一遍ans清零
		b[i]='a'+i;//将26个字母存进b[i]
		
	for(int j=0;j<strlen(a);j++){
		if(a[j]==b[i]){
			ans++;
		}
	}
	c[i]=ans;//将26个字母出现的次数存进c[i]
	}
	
	sort(c,c+26);
	int max=c[25];
	int min=c[25];
	for(int i=0;i<26;i++){
		if(c[i]!=0&&c[i]<min){
			min=c[i];//找到除了0以外最小的数
		}
	}
	//cout<<max<<" "<<min<<endl;
	int q=max-min;
	f(q);
	if(f(q)){
		cout<<"Lucky Word"<<endl;
		cout<<q;
	}else{
		cout<<"No Answer"<<endl;
		cout<<0;	
	}
	return 0;
}

4、P1957 口算练习题

#include<bits/stdc++.h>
using namespace std;

	int n,x,a,b;
	string q;
	char l_c;

int len(int num){
	int x=0;
	if(num==0){
		return 1;
	}else if(num>0){
		while(num){
			num/=10;
			x++;
		}
		return x;
	}else{
		x=1;
		num=-num;
		
		while(num){
			num/=10;
			x++;
		}
		return x;
		
	}
}//读取num的长度

int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>q;
		switch(q[0]){
			case'a':
				cin>>a>>b;
				printf("%d+%d=%d\n",a,b,a+b);
				x=len(a+b)+2;
				l_c=q[0];
				break;
			case'b':
				cin>>a>>b;
				printf("%d-%d=%d\n",a,b,a-b);
				x=len(a-b)+2;
				l_c=q[0];
				break;
			case'c':
				cin>>a>>b;
				printf("%d*%d=%d\n",a,b,a*b);
				x=len(a*b)+2;
				l_c=q[0];
				break;
			default:
					cin>>b;
					a=0;
					int l=q.size();
					for(int i=0;i<l;i++){
						a=a*10+q[i]-'0';
					}
				switch(l_c){
					case'a':
						printf("%d+%d=%d\n",a,b,a+b);
						x=len(a+b)+2;
						break;
					case'b':
						printf("%d-%d=%d\n",a,b,a-b);
						x=len(a-b)+2;
						break;
					case'c':
						printf("%d*%d=%d\n",a,b,a*b);
						x=len(a*b)+2;
						break;
					default:
						break;
						
				}
				break;
		}
		x=len(a)+len(b)+x;
		printf("%d\n",x);
	}
	return 0;
}
#include<bits/stdc++.h>
using namespace std;
int n,a,b;
string s;
char opt;

int lena(int x){
	int len=0;
	if(!x) return 1;
	if(x<0)len++;
	while(x){
		len++;
		x/=10;
	}
	return len;
}
int main(){
	cin>>n;
	while(n--){
		cin>>s;
		if(s[0]=='a'||s[0]=='b'||s[0]=='c'){
			cin>>a;
			opt=s[0];
		}else{
			a=0;
			for(int i=0;i<s.length();i++){
				a=a*10+(s[i]-'0');//字符转成int
			}
		}
		cin>>b;
		if(opt=='a'){
			cout<<a<<"+"<<b<<"="<<a+b<<endl;
			cout<<lena(a)+lena(b)+lena(a+b)+2<<endl;
		}
		if(opt=='b'){
			cout<<a<<"-"<<b<<"="<<a-b<<endl;
			cout<<lena(a)+lena(b)+lena(a+b)+2<<endl;
		}
		if(opt=='c'){
			cout<<a<<"*"<<b<<"="<<a*b<<endl;
			cout<<lena(a)+lena(b)+lena(a+b)+2<<endl;
		}
	}
	return 0;
}

5、P5015 [NOIP2018 普及组] 标题统计

#include<bits/stdc++.h>
using namespace std;
int main(){
	string s;
	int l;
	getline(cin,s);
	l=s.size();
	int ans=l;
	for(int i=0;i<l;i++){
		if(s[i]==' '){
			ans--;
		}
	}
	cout<<ans<<endl;
	return 0;
}

6、P5734 【深基6.例6】文字处理软件

#include<bits/stdc++.h>
using namespace std;
int n,a;
string qwq;
string c1;
string b1;
int b,c;
int main()
{
	cin>>n;
	cin>>qwq;
	for(int i=0;i<n;i++)
	{
		cin>>a;
		if(a==1)
		{
			cin>>b1;
			qwq+=b1;
			cout<<qwq<<endl;
		}
		else if(a==2)
		{
			cin>>b>>c;
			c1=qwq.substr(b,c);
			qwq=c1;
			cout<<qwq;
			cout<<endl;
		}
		else if(a==3)
		{
			cin>>b>>b1;
			qwq.insert(b,b1);
			cout<<qwq<<endl;
		}
		else if(a==4)
		{
			cin>>b1;
			if(qwq.find(b1)<qwq.size())
			cout<<qwq.find(b1)<<endl;
			else
			cout<<-1<<endl;
		}
	}
    return 0;
}

注:

在C++中,find() 函数是 std::string 类和 std::vector 类等容器类的一个成员函数,用于在容器中查找特定的元素或子字符串。根据上下文,find() 函数的行为可能会有所不同。

对于 std::string

std::string 类的 find() 函数用于查找子字符串在主字符串中第一次出现的位置。如果找到,它返回子字符串的索引;如果没有找到,它返回 std::string::npos,这是一个表示无效位置的静态成员常量。

7、P1308 [NOIP2011 普及组] 统计单词数

#include<bits/stdc++.h>
using namespace std;
string s1,s2;
int main(){
	getline(cin,s1);
	getline(cin,s2);//带空格读入字符串
	
    //避免大小写,将字符串s1,s2转为小写a-97,A-65
	for(int i=0;i<s1.length();i++){
		if(s1[i]>='A'&&s1[i]<='Z'){
			s1[i]+=32;
		}
	}
	for(int i=0;i<s2.length();i++){
		if(s2[i]>='A'&&s2[i]<='Z'){
			s2[i]+=32;
		}
	}
	
	s1=' '+s1+' ';//特殊问题一般化
	s2=' '+s2+' ';
	
	int pos,first,cnt=0;
	pos=first=s2.find(s1);
	
	if(pos==string::npos) cout<<-1;//没找到
	else{
		while(pos!=string::npos){
			cnt++;
			pos=s2.find(s1,pos+1);
			pos=s2.find()
		}
		cout<<cnt<<" "<<first;
	}
	return 0;
}

8、P3741 小果的键盘

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,ans=0;
	string s;
	cin>>n>>s;
	if(n<=1){
		cout<<0<<endl;
	}else{
		
	for(int i=0;i<n;i++){
		if(s[i]=='V'&&s[i+1]=='K'){
			ans+=1;
			s[i]='1';
			s[i+1]='1';//标记,避免重复计算
		}
	}
	for(int i=0;i<n;i++){
		if((s[i]=='V'&&s[i+1]=='V')||(s[i]=='K'&&s[i+1]=='K')){
			ans+=1;
			break;//最多只能改一次
		}
	}
	cout<<ans<<endl;
	}
	return 0;
}

9、P1321 单词覆盖还原

#include<bits/stdc++.h>
using namespace std;
int main(){
	int a=0,b=0;
	string s;
	cin>>s;
	for(int i=0;i<s.length();i++){
		if(s[i]=='b'||s[i+1]=='o'||s[i+2]=='y'){
			a++;
		}
		if(s[i]=='g'||s[i+1]=='i'||s[i+2]=='r'||s[i+3]=='l'){
			b++;
		}
	}
	cout<<a<<endl<<b;
	return 0;
}

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值