P5733 【深基6.例1】自动修正
#include <bits/stdc++.h>
#include<string>
using namespace std;
int main(){
string s1;
cin>>s1;
for(int i=0;i<=s1.size()-1;i++){
if('a'<=s1[i]&&s1[i]<='z'){
s1[i]=s1[i]-'a'+'A';
}
}
cout<<s1;
return 0;
}
P1914 小书童——凯撒密码
#include <bits/stdc++.h>
#include<string>
using namespace std;
int main(){
int n;
cin>>n;
string s1;
cin>>s1;
for(int i=0;i<=s1.size()-1;i++){
s1[i]=(s1[i]+n-'a')%26+'a';
}
cout<<s1;
return 0;
}
考点:ASCII表 a-->97,A-->65
P1125 [NOIP2008 提高组] 笨小猴
#include <bits/stdc++.h>
#include<string>
using namespace std;
int alphabet[26]={0};
bool ifpri(int k){
if(k==1||k==0){
return 0;
}
for(int i=2;i<=k/2;i++){
if(k%i==0){
return 0;
}
}
return 1;
}
int main(){
string s1;
cin>>s1;
for(int i=0;i<=s1.size()-1;i++){
alphabet[(int)s1[i]-'a']++;
}
int maxn=alphabet[0];
int minn=101;
for(int i=1;i<=25;i++){
if(alphabet[i]>=maxn)
maxn=alphabet[i];
if(alphabet[i]<=minn&&alphabet[i]>0)
minn=alphabet[i];
}
if(ifpri(maxn-minn))
cout<<"Lucky Word"<<endl<<maxn-minn;
else
cout<<"No Answer"<<endl<<0;
return 0;
}
考点:判断从0开始的素数,0和1不是素数。
P1957 口算练习题
#include <bits/stdc++.h>
#include<string>
using namespace std;
int howlong(int t){
int sum=0;
if(t==0){
return 1;
}
if(t<0){
sum++;
t=t*(-1);
}
while(t>0){
sum++;
t=t/10;
}
return sum;
}
int main(){
int n;
cin>>n;
string s1;
char record;
int x,y;
int x_l,y_l,z_l;
for(int i=1;i<=n;i++){
cin>>s1;
if(s1[0]=='a'){
cin>>x>>y;
record=s1[0];
printf("%d+%d=%d\n",x,y,x+y);
x_l=howlong(x);
y_l=howlong(y);
z_l=howlong(x+y);
cout<<x_l+y_l+1+1+z_l<<endl;
continue;
}
else if(s1[0]=='b'){
cin>>x>>y;
record=s1[0];
printf("%d-%d=%d\n",x,y,x-y);
x_l=howlong(x);
y_l=howlong(y);
z_l=howlong(x-y);
cout<<x_l+y_l+1+1+z_l<<endl;
}
else if(s1[0]=='c'){
cin>>x>>y;
record=s1[0];
printf("%d*%d=%d\n",x,y,x*y);
x_l=howlong(x);
y_l=howlong(y);
z_l=howlong(x*y);
cout<<x_l+y_l+1+1+z_l<<endl;
}
else if(s1[0]!='a'&&s1[0]!='b'&&s1[0]!='c'){
cin>>y;
x=0;
for(int j=0;j<=s1[j]!='\0';j++){
x=x*10+(s1[j]-'0');
}
if(record=='a'){
printf("%d+%d=%d\n",x,y,x+y);
x_l=howlong(x);
y_l=howlong(y);
z_l=howlong(x+y);
cout<<x_l+y_l+1+1+z_l<<endl;
}
else if(record=='b'){
printf("%d-%d=%d\n",x,y,x-y);
x_l=howlong(x);
y_l=howlong(y);
z_l=howlong(x-y);
cout<<x_l+y_l+1+1+z_l<<endl;
}
else if(record=='c'){
printf("%d*%d=%d\n",x,y,x*y);
x_l=howlong(x);
y_l=howlong(y);
z_l=howlong(x*y);
cout<<x_l+y_l+1+1+z_l<<endl;
}
}
}
return 0;
}
考点:模拟题,输入字符转数字细节,算长度的时候负数和0要注意。
P5015 [NOIP2018 普及组] 标题统计
#include <bits/stdc++.h>
#include<string>
using namespace std;
string s1;
int main(){
getline(cin,s1);
int sum=0;
for(int i=0;i<=s1.size()-1;i++){
if(s1[i]>='0'&&s1[i]<='9')
sum++;
if(s1[i]>='a'&&s1[i]<='z')
sum++;
if(s1[i]>='A'&&s1[i]<='Z')
sum++;
}
cout<<sum;
return 0;
}
考点:注意只有行末有空格。还是掌握getline(cin,s1)这个可以输入空格的语法。
P5734 【深基6.例6】文字处理软件
#include<bits/stdc++.h>
#include<string>
using namespace std;
int main(){
int n;
cin>>n;
string s1;
cin>>s1;
while(n--){
int a;
cin>>a;
if(a==1){
string s2;
cin>>s2;
s1.append(s2);
cout<<s1<<endl;
}
else if(a==2){
int s,l;
cin>>s>>l;
s1=s1.substr(s,l);
cout<<s1<<endl;
}
if(a==3){
int ss;
cin>>ss;
string s3;
cin>>s3;
s1.insert(ss,s3);
cout<<s1<<endl;
}
if(a==4){
string s4;
cin>>s4;
if(s1.find(s4)<s1.size())
cout<<s1.find(s4)<<endl;
else
cout<<-1<<endl;
}
}
return 0;
}
考点:用c++的话就得熟悉相应操作,find函数如果没有找到的话会返回一个很大的数。
P1308 [NOIP2011 普及组] 统计单词数
#include<bits/stdc++.h>
#include<string>
using namespace std;
int firstp=-1;
int sum=0;
string s1;
string s2;
int main(){
getline(cin,s1);
getline(cin,s2);
for(int i=0;i<s1.length();i++){
s1[i]=tolower(s1[i]);
}
for(int i=0;i<s2.length();i++){
s2[i]=tolower(s2[i]);
}
s1=' '+s1+' ';
s2=' '+s2+' ';
if(s2.find(s1)==string::npos)
cout<<-1<<endl;
else{
firstp=s2.find(s1);
int temp=firstp;
while(temp!=string::npos){
sum++;
temp=s2.find(s1,temp+1);
}
cout<<sum<<' '<<firstp;
}
return 0;
}
考点:还是之前c++字符串输入输出的语法,还需要注意一下输入之后缓存区是否会有换行符残留,调试很有必要。