【入门5】字符串 【完结】

本文集精选了多个在线编程平台上的经典题目,涵盖字符串处理、算法实现及数据统计等,通过实际代码示例展示了多种编程技巧与思路。

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

在这里插入图片描述
https://www.luogu.com.cn/problem/P5733

#include<cstdio>
#include<iostream>
#include<string> 
using namespace std;
int main(void)
{
	string str; cin>>str;
	for(int i=0;i<str.size();i++) 
	{
		str[i]=toupper(str[i]);
	}
	cout<<str<<endl;
}

P1914 小书童——凯撒密码

在这里插入图片描述
https://www.luogu.com.cn/problem/P1914

#include<cstdio>
#include<iostream>
#include<string> 
using namespace std;
int a[105];
int main(void)
{
	int n; cin>>n;
	string str; cin>>str;
	for(int i=0;i<str.size();i++) 
	{
		a[i]=(str[i]-'a'+n)%26;
	}
	for(int i=0;i<str.size();i++) 
	printf("%c",a[i]+'a');
}

P1125 [NOIP2008 提高组] 笨小猴

在这里插入图片描述
https://www.luogu.com.cn/problem/P1125

#include<cstdio>
#include<iostream>
#include<string>
#include<cmath> 
using namespace std;
int hush[30];
bool judge(int x)
{
	if(x==0) return false;
	if(x==1) return false;
	if(x==2) return true;
	int temp=sqrt(x);
	for(int i=2;i<=temp;i++)
		if(x%i==0) return false;
	return true;
}
int m1=1e5,m2;
int main(void)
{
	string s; cin>>s;
	for(int i=0;i<s.size();i++) hush[s[i]-'a']++;
	for(int i=0;i<26;i++)
	{
		if(hush[i]) m1=min(m1,hush[i]),m2=max(m2,hush[i]);
	}
	if(judge(m2-m1)) cout<<"Lucky Word"<<endl<<m2-m1<<endl;
	else cout<<"No Answer"<<endl<<0<<endl;
	return 0;
}

P1957 口算练习题

在这里插入图片描述
https://www.luogu.com.cn/problem/P1957

#include<cstdio>
#include<iostream>
#include<string>
#include<sstream>
#include<vector>
using namespace std;
int n;
string s[60];
vector<string> ve;
int main(void)
{
	cin>>n;
	getline(cin,s[0]);
	for(int i=0;i<n;i++)	getline(cin,s[i]);
	for(int i=0;i<n;i++)
	{
		char op;
		string ss;
		int number1,number2,sum;
		stringstream l(s[i]);
		if(s[i][0]>='a'&&s[i][0]<='z')
		{
			op=s[i][0];
			l>>op>>number1>>number2;
		}
		else
			l>>number1>>number2;
		ss+=to_string(number1);
		if(op=='a') ss+='+',sum=number1+number2,ss+=to_string(number2),ss+='=',ss+=to_string(sum);
		if(op=='b') ss+='-',sum=number1-number2,ss+=to_string(number2),ss+='=',ss+=to_string(sum);
		if(op=='c') ss+='*',sum=number1*number2,ss+=to_string(number2),ss+='=',ss+=to_string(sum);
		ve.push_back(ss);
	} 
	for(int i=0;i<ve.size();i++) cout<<ve[i]<<endl<<ve[i].size()<<endl;
	return 0;
}

P5015 [NOIP2018 普及组] 标题统计

在这里插入图片描述
https://www.luogu.com.cn/problem/P5015

#include<cstdio>
#include<iostream>
#include<string> 
using namespace std;
int main(void)
{
	int ans=0;
	string s;
	while(cin>>s)
	{
		ans+=s.size();	
	}
	cout<<ans;
}

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

在这里插入图片描述
https://www.luogu.com.cn/problem/P5734

#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
	int n;
	string s;
	cin>>n>>s;
	while(n--)
	{
		int op; cin>>op;
		if(op==1)
		{
			string a; cin>>a;
			s+=a; cout<<s<<endl;
		}
		if(op==2) 
		{
			int a,b; cin>>a>>b;
			string temp;
			temp=s.substr(a,b);
			s=temp;
			cout<<temp<<endl;
		}
		if(op==3)
		{
			int a; string temp;
			cin>>a>>temp;
			string s1,s2;
			s1=s.substr(0,a);
			s2=s.substr(a,s.size()-a);
			s.clear();
			s=s+s1,s=s+temp,s=s+s2;
			cout<<s<<endl;
		}
		if(op==4)
		{
			string a; cin>>a;
			if(s.find(a)!=-1) cout<<s.find(a)<<endl;
			else cout<<-1<<endl;
		}
	}
	return 0;
}

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

在这里插入图片描述
https://www.luogu.com.cn/problem/P1308

#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int index;
int cnt;
bool flag=true;//有没有答案
int main(void)
{
	string a,b;
	cin>>a;
	for(int i=0;i<a.size();i++) a[i]=toupper(a[i]);
	getline(cin,b),getline(cin,b);
	for(int i=0;i<b.size();i++) b[i]=toupper(b[i]);
	for(int i=0;i<b.size();i++)
	{
		if(b[i]==a[0]&&b[i-1]==' ')
		{
			int k=i;
			bool flag1=true;//首次
			for(int j=0;j<a.size();j++)
			{
				if(a[j]!=b[k++])
				{
					flag1=false;
					break;
				}
			}
			if(!flag1) continue;
			if(b[k]==' ') cnt++;
			else continue;
			if(flag) index=i,flag=false;	
		}
	}
	if(!flag)cout<<cnt<<" "<<index<<endl;
	else cout<<-1<<endl;
}

P1765 手机

在这里插入图片描述
https://www.luogu.com.cn/problem/P1765

#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int ans;
int main(void)
{
	string s;
	getline(cin,s);
	for(int i=0;i<s.size();i++)
	{
		if(s[i]==' ')
		{
			ans++;
			continue; 
		} 
		if(s[i]>='a'&&s[i]<='c')
		{
			ans+=s[i]-'a'+1;
			continue;
		}
		if(s[i]>='d'&&s[i]<='f')
		{
			ans+=s[i]-'d'+1;
			continue;
		}
		if(s[i]>='g'&&s[i]<='i')
		{
			ans+=s[i]-'g'+1;
			continue;
		}
		if(s[i]>='j'&&s[i]<='l')
		{
			ans+=s[i]-'j'+1;
			continue;
		}
		if(s[i]>='m'&&s[i]<='o')
		{
			ans+=s[i]-'m'+1;
			continue;
		}
		if(s[i]>='p'&&s[i]<='s')
		{
			ans+=s[i]-'p'+1;
			continue;
		}
		if(s[i]>='t'&&s[i]<='v')
		{
			ans+=s[i]-'t'+1;
			continue;
		}
		if(s[i]>='w'&&s[i]<='z')
		{
			ans+=s[i]-'w'+1;
			continue;
		}
	}
	cout<<ans<<endl;
	return 0;
} 

P3741 honoka的键盘

在这里插入图片描述
https://www.luogu.com.cn/problem/P3741

#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
bool flag=false;
int main(void)
{
	int n; cin>>n;
	string s; cin>>s;
	int ans=0;
	for(int i=0;i<s.size();i++)
	{
		if(s[i]=='V'&&s[i+1]=='K') ans++,s[i]='x',s[i+1]='x';//找到VK将其替换
	}
	for(int i=0;i<s.size();i++)//VV 或 KK 可以使结果加1
	{
		if(s[i]=='V'&&s[i+1]=='V') 
		{
			flag=true;break;
		}
		if(s[i]=='K'&&s[i+1]=='K')
		{
			flag=true;
			break;
		}
	}
	if(flag) cout<<ans+1<<endl;
	else cout<<ans<<endl;
}

P1321 单词覆盖还原

在这里插入图片描述
https://www.luogu.com.cn/problem/P1321

#include<cstdio>
#include<iostream>
using namespace std;
int ans1,ans2;
int main(void)
{
	string a; cin>>a;
	for(int i=0;i<a.size();i++)
	{
		if(a[i]=='b') ans1++;
		if(a[i]=='o'&&a[i-1]!='b') ans1++;
		if(a[i]=='y'&&a[i-1]!='o') ans1++;
		
		if(a[i]=='g') ans2++;
		if(a[i]=='i'&&a[i-1]!='g') ans2++;
		if(a[i]=='r'&&a[i-1]!='i') ans2++;
		if(a[i]=='l'&&a[i-1]!='r') ans2++;
	}
	cout<<ans1<<endl<<ans2<<endl; 
	return 0;
}

P1553 数字反转(升级版)

在这里插入图片描述
https://www.luogu.com.cn/problem/P1553

#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
bool flag1,flag2,flag3,flag4;
int index;
int main(void)
{
	string s; cin>>s;
	string s1;
	for(int i=0;i<s.size();i++)
	{
		if(s[i]>='0'&&s[i]<='9') s1+=s[i];
		if(s[i]=='.')
		{
			flag2=true;
			index=i;
			break;
		}
		if(s[i]=='/')
		{
			flag3=true;
			index=i;
			break;
		}
		if(s[i]=='%')
		{
			flag4=true;
			index=i;
			break;
		}
	}
	
	bool flag=false;
	reverse(s1.begin(),s1.end()); 
	for(int i=0;i<s1.size();i++)
	{
		if(s1[i]!='0') flag=true;
		if(flag) cout<<s1[i];
	}
	if(index==0)
	{
		if(!flag) cout<<0<<endl;
		return 0;
	} 
	if(flag2||flag3)
	{
		if(!flag) cout<<0;
		string s2;
		for(int i=index+1;i<s.size();i++) s2+=s[i];
		reverse(s2.begin(),s2.end());
		flag=false;
		if(flag2) cout<<".";
		if(flag3) cout<<"/";
		flag=false;
		if(flag2)
		{
			if(s2.size()==1&&s2=="0") 
			{
				cout<<"0"<<endl;
				return 0;
			}
			int temp=s2.size()-1;
			while(s2[temp]=='0') temp--;
			for(int i=0;i<=temp;i++) cout<<s2[i];
		}	
		if(flag3)
			for(int i=0;i<s2.size();i++)
			{
				if(s2[i]!='0') flag=true;
				if(flag) cout<<s2[i];
			}
	}
	if(flag4) 
	{
		if(!flag) cout<<0;//如果都是零,输出一个零
		cout<<"%"<<endl;
	}
	return 0;
}

P1603 斯诺登的密码

在这里插入图片描述
https://www.luogu.com.cn/problem/P1603

#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm>
#include<cmath>
#include<map>
#include<vector>
using namespace std;
map<string,int>q;
vector<int> ve;
int main(void)
{
	q["one"]=1;q["two"]=2;q["three"]=3;q["four"]=4;q["five"]=5;q["six"]=6;q["seven"]=7;q["eight"]=8;q["nine"]=9;q["ten"]=10; 
    q["eleven"]=11;q["twelve"]=12;q["thirteen"]=13;q["fourteen"]=14;q["fifteen"]=15;q["sixteen"]=16;q["seventeen"]=17;q["eighteen"]=18;q["nineteen"]=19;q["twenty"]=20;
    q["a"]=1;q["both"]=2;q["another"]=1;q["first"]=1;q["second"]=2;q["third"]=3;
    string a;
	while(cin>>a,a!=".") 
	{
		if(q[a])
		{
			int temp=pow(q[a],2);
			temp=temp%100;
			ve.push_back(temp);
		}
	}
	sort(ve.begin(),ve.end());
	for(int i=0;i<ve.size();i++)
	{
		if(i==0) cout<<ve[i];
		else printf("%02d",ve[i]);
	}
	if(!ve.size()) cout<<0<<endl;
	return 0;
}

P1200 [USACO1.1]你的飞碟在这儿Your Ride Is Here

在这里插入图片描述
https://www.luogu.com.cn/problem/P1200

#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
long long int sum1,sum2;
int main(void)
{
	sum1=sum2=1;
	string a,b; cin>>a>>b;
	for(int i=0;i<a.size();i++) sum1=sum1*(a[i]-'A'+1);
	for(int i=0;i<b.size();i++) sum2=sum2*(b[i]-'A'+1);
	if(sum1%47==sum2%47) cout<<"GO";
	else cout<<"STAY"<<endl;
	return 0;
}

P1597 语句解析

在这里插入图片描述
https://www.luogu.com.cn/problem/P1597

#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
    int z[3]={0};//存三个变量的值(初始值为0)
    char q,h,wl;//q为被赋值变量,h为赋值量,wl为赋值表达式中不直接关系到运算的无关字符(直接读掉)
    while(scanf("%c %c %c %c %c",&q,&wl,&wl,&h,&wl)!=EOF)//利用scanf返回值,判断是否已读完
    {
        if('0'<=h&&h<='9')z[q-'a']=h-'0';//若为数字,则给变量赋值为此数字
        else z[q-'a']=z[h-'a'];//若为变量,则将这个变量的值赋值给它
    }
    printf("%d %d %d",z[0],z[1],z[2]);//直接输出三变量值
    return 0;
}

P1598 垂直柱状图

在这里插入图片描述
https://www.luogu.com.cn/problem/P1598

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int cnt[26];
int s=0;
bool mp[620][26];
int main(void)
{
	
	for(int i=0;i<4;i++)
	{
		string a;getline(cin,a);
		for(int i=0;i<a.size();i++)
			if(a[i]>='A'&&a[i]<='Z')cnt[a[i]-'A']++;
	}
	for(int i=0;i<26;i++) s=max(s,cnt[i]);
	for(int i=0;i<26;i++)
	{
		for(int j=s-cnt[i]+1;j<=s;j++)
		{
			mp[j][i]=true;
		}
	}
	for(int i=1;i<=s;i++)
	{
		for(int j=0;j<26;j++)
		{
			if(mp[i][j]) cout<<"*";
			else cout<<" ";
			if(j!=25) cout<<" ";
		}
		cout<<endl;
	}
	for(int i=0;i<26;i++) printf("%c ",'A'+i);
	return 0;
}
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int ff[26];//定义计数数组
int main()
{
    int i,j,n,maxn=0;char a[81];
    for(i=0;i<4;i++)
    {
        gets(a);//gets读入
        n=strlen(a);
        for(j=0;j<n;j++)if(a[j]>='A'&&a[j]<='Z')ff[a[j]-'A']++;//统计字符出现次数
    }
    for(i=0;i<26;i++)maxn=max(maxn,ff[i]);//最多次数(最高柱状图)
    for(i=maxn;i>0;i--){
    for(j=0;j<26;j++)
    if(ff[j]>=i)printf("* ");else printf("  ");//模拟,是可以输出的就输出*,否则跳过
    printf("\n");}//换行
    for(i=0;i<26;i++)printf("%c ",i+'A');//输出a~z
}
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值