»1.7编程基础之字符串(35题)
01:统计数字字符个数
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
getline(cin,a);
int count=0;
for(int i=0;i<a.length();++i)
{
if('0'<=a[i]&&a[i]<='9')count++;
}
cout<<count;
return 0;
}
02:找第一个只出现一次的字符
#include<iostream>
#include<string>
using namespace std;
int num[26]={};
int main()
{
string a;
cin>>a;
int flag=1;
int c=a.length();
for(int i=0;i<c;++i)
{
num[a[i]-'a']++;
}
for(int j=0;j<c;++j)
{
if(num[a[j]-'a']==1)
{
flag=0;
printf("%c",a[j]);
break;
}
}
if(flag)
{
cout<<"no";
}
return 0;
}
03:基因相关性
#include<iostream>
#include<string>
using namespace std;
int num[26]={};
int main()
{
double flag;cin>>flag;
string one;cin>>one;
string two;cin>>two;
int len=one.length();
double same=0;
for(int i=0;i<len;++i)
{
if(one[i]==two[i])same++;
}
if((same/len)<flag)
{
cout<<"no";
}
else
{
cout<<"yes";
}
return 0;
}
04:石头剪子布
#include<iostream>
#include<string>
using namespace std;
int num[26]={};
int Result(string one,string two)
{
if((one=="Scissors"&&two=="Paper")||(one=="Paper"&&two=="Rock")||(one=="Rock"&&two=="Scissors"))
{
return 1;
}
else if(one==two)
{
return 0;
}
else
{
return 2;
}
}
int main()
{
int n;cin>>n;
string one;
string two;
for(int i=0;i<n;++i)
{
cin>>one>>two;
int c=Result(one,two);
if(c==1)
{
cout<<"Player1\n";
}
else if(c==2)
{
cout<<"Player2\n";
}
else
{
cout<<"Tie\n";
}
}
return 0;
}
05:输出亲朋字符串
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s1;
getline(cin,s1);
string s2="";
for(int i=0;i<s1.length()-1;++i)
{
int t1=s1[i];
int t2=s1[i+1];
char t3=t1+t2;
s2+=t3;
}
int r=(int)s1[s1.length()-1]+(int)s1[0];
s2+=(char)r;
cout<<s2<<endl;
return 0;
}
/*
WA了两发,忘记了有可能输入带空格这种条件
*/
06:合法 C 标识符
#include<iostream>
#include<string>
using namespace std;
bool One(string a)
{
string table[]={
"auto","break","case","char",
"const","continue","default","do",
"double","else","enum","extern",
"float","for","goto","if",
"int","long","return","short",
"signed","sizeof","static","struct",
"switch","typedef","union","unsigned",
"void","volatile","while" };
for(int i=0;i<31;++i)
{
if(table[i]==a)
{
return false;
}
}
return true;
}
bool Two(string a)
{
for(int i=0;i<a.length();++i)
{
if(('0'<=a[i]&&a[i]<='9')||('a'<=a[i]&&a[i]<='z')||('A'<=a[i]&&a[i]<='Z')||(a[i]=='_'))
{
;
}
else
{
return false;
}
}
return true;
}
bool Three(string a)
{
if('0'<=a[0]&&a[0]<='9')
{
return false;
}
else
{
return true;
}
}
int main()
{
string c;
getline(cin,c);
if(One(c)&&Two(c)&&Three(c))
{
cout<<"yes";
}
else
{
cout<<"no";
}
return 0;
}
07:配对碱基链
#include<iostream>
#include<string>
using namespace std;
int main()
{
string c;
string d="";
getline(cin,c);
for(int i=0;i<c.length();++i)
{
switch(c[i])
{
case 'A':d+='T';break;
case 'T':d+='A';break;
case 'G':d+='C';break;
case 'C':d+='G';break;
}
}
cout<<d;
return 0;
}
08:字符替换
#include<iostream>
#include<string>
using namespace std;
int main()
{
string c;cin>>c;
string d="";
char ty;cin>>ty;
char th;cin>>th;
for(int i=0;i<c.length();++i)
{
if(c[i]==ty)c[i]=th;
}
cout<<c;
return 0;
}
09:密码翻译
#include<iostream>
#include<string>
using namespace std;
int main()
{
string c;
getline(cin,c);
for(int i=0;i<c.length();++i)
{
if('a'<=c[i]&&c[i]<='z')
{
c[i]=(c[i]+1-'a')%26+'a';
}
if('A'<=c[i]&&c[i]<='Z')
{
c[i]=(c[i]+1-'A')%26+'A';
}
}
cout<<c;
return 0;
}
10:简单密码
#include<iostream>
#include<string>
using namespace std;
int main()
{
string c;
getline(cin,c);
char t2[26]={'V', 'W', 'X', 'Y', 'Z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U'};
for(int i=0;i<c.length();++i)
{
if('A'<=c[i]&&c[i]<='Z')
{
c[i]=t2[c[i]-'A'];
}
}
cout<<c;
return 0;
}
11:潜伏者
#include<iostream>
#include<string>
using namespace std;
char t[26];
int s[26];
int main()
{
string c="";
string bc="";
string r="";
int flag=0;
getline(cin,c);
getline(cin,bc);
getline(cin,r);
for(int i=0;i<bc.length();++i)
{
s[bc[i]-'A']++;
if(t[c[i]-'A']&&t[c[i]-'A']!=bc[i])
{
flag=1;
break;
}
t[c[i]-'A']=bc[i];
}
for(int i=0;i<26;++i)
{
if(s[i]==0)
{
flag=1;
}
}
if(flag)
{
cout<<"Failed";
return 0;
}
for(int i=0;i<r.length();++i)
{
r[i]=t[r[i]-'A'];
}
cout<<r;
return 0;
}
12:加密的病历单
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string c="";
int flag=0;
getline(cin,c);
for(int i=0;i<c.length();++i)
{
if('a'<=c[i]&&c[i]<='z')
{
c[i]=(c[i]-'a'+3+26)%26+'A';
}
else if('A'<=c[i]&&c[i]<='Z')
{
c[i]=(c[i]-'A'+3+26)%26+'a';
}
}
reverse(c.begin(),c.end());
cout<<c;
return 0;
}
13:将字符串中的小写字母转换成大写字母
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string c="";
getline(cin,c);
for(int i=0;i<c.length();++i)
{
if('a'<=c[i]&&c[i]<='z')
{
c[i]=(c[i]-'a'+26)%26+'A';
}
}
cout<<c;
return 0;
}
14:大小写字母互换
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string c="";
getline(cin,c);
for(int i=0;i<c.length();++i)
{
if('a'<=c[i]&&c[i]<='z')
{
c[i]=(c[i]-'a'+26)%26+'A';
}
else if('A'<=c[i]&&c[i]<='Z')
{
c[i]=(c[i]-'A'+26)%26+'a';
}
}
cout<<c;
return 0;
}
15:整理药名
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
int n;
cin>>n;
string c;
for(int i=0;i<n;++i)
{
cin>>c;
if('a'<=c[0]&&c[0]<='z')
{
c[0]=(c[0]-'a'+26)%26+'A';
}
for(int j=1;j<c.length();++j)
{
if('A'<=c[j]&&c[j]<='Z')
{
c[j]=(c[j]-'A'+26)%26+'a';
}
}
cout<<c<<endl;
}
return 0;
}
16:忽略大小写的字符串比较
#include<iostream>
#include<string>
#include<string.h>
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
string c;
string b;
getline(cin,c);
getline(cin,b);
for(int i=0;i<c.length();++i)
{
if('a'<=c[i]&&c[i]<='z')
{
c[i]=(c[i]-'a'+26)%26+'A';
}
}
for(int i=0;i<b.length();++i)
{
if('a'<=b[i]&&b[i]<='z')
{
b[i]=(b[i]-'a'+26)%26+'A';
}
}
int ptr=c.compare(b);
if(ptr>0)
{
cout<<">";
}
else if(ptr<0)
{
cout<<"<";
}
else
{
cout<<"=";
}
return 0;
}
17:字符串判等
#include<iostream>
#include<string>
#include<string.h>
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
string c;
string b;
string d;
string e;
getline(cin,c);
getline(cin,b);
for(int i=0;i<c.length();++i)
{
if('a'<=c[i]&&c[i]<='z')
{
c[i]=(c[i]-'a'+26)%26+'A';
}
if(c[i]!=' ')d+=c[i];
}
for(int i=0;i<b.length();++i)
{
if('a'<=b[i]&&b[i]<='z')
{
b[i]=(b[i]-'a'+26)%26+'A';
}
if(b[i]!=' ')e+=b[i];
}
int ptr=e.compare(d);
if(ptr==0)
{
cout<<"YES";
}
else
{
cout<<"NO";
}
return 0;
}
18:验证子串
#include<iostream>
using namespace std;
int main()
{
string a,b;
string max,min;
getline(cin,a);
getline(cin,b);
if(a.length()>b.length())
{
max=a;
min=b;
}
else
{
max=b;
min=a;
}
int j=0;
int i=0;
for(;j<min.length()&&i<max.length();++i)
{
// cout<<i<<"_"<<max[i]<<"::"<<j<<"_"<<min[j]<<endl;
if(min[j]==max[i])
{
j++;
}
else
{
j=0;
}
}
if(j==min.length())
{
cout<<min<<" is substring of "<<max;
}
else
{
cout<<"No substring";
}
return 0;
}
19:字符串移位包含问题
#include<iostream>
using namespace std;
int main()
{
string a,b,c="";
string max,min;
cin>>max>>min;
if(max.length()>min.length())
{
a=max;
b=min;
}
else
{
a=min;
b=max;
}
int len=a.length();
for(int i=1;i<len;++i)
{
c=a.substr(i)+a.substr(0,i);
if(c.find(b)!=string::npos)
{
cout<<"true";
return 0;
}
// cout<<c<<endl;
}
if(a.find(b)!=string::npos)
{
cout<<"true";
}
else
{
cout<<"false";
}
return 0;
}
20:删除单词后缀【字符串饭庄+字符串查找】
#include<iostream>
using namespace std;
int main()
{
string a,b[3]={"er","ly"};
string max,min;
cin>>a;
if(a.length()>2)
{
if("ing"==a.substr(a.length()-3)&&a.length()>3)
{
a=a.substr(0,a.length()-3);
}
else
{
for(int i=0;i<2;++i)
{
string::size_type pos=a.find(b[i]);
if(pos!=string::npos)
{
a=a.substr(0,a.length()-2);
break;
}
}
}
}
cout<<a;
return 0;
}
21:单词替换
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a,b,c;
getline(cin,a);
getline(cin,b);
getline(cin,c);
int fk=0;
while(1)
{
string::size_type pos=a.find(b,fk++);
if(pos!=string::npos)
{
if(pos==0&&a[b.length()]==' ' ||
pos==a.length()-b.length()&&a[pos-1]==' '||
pos>0&&a[pos-1]==' '&&a[pos+b.length()]==' ')
a=a.substr(0,pos)+c+a.substr(pos+b.length());
}
else
{
break;
}
}
cout<<a;
return 0;
}
22:紧急措施
#include<iostream>
#include<string>
using namespace std;
int main()
{
string my;
string name,pass,email;
int n,fk=1;
cin>>my>>n;
for(int i=0;i<n;++i)
{
cin>>name>>pass>>email;
if(email==my)
{
fk=0;
for(int j=0;j<pass.length();++j)
{
if('a'<=pass[j]&&pass[j]<='z')
{
pass[j]-=('a'-'A');
}
else if('A'<=pass[j]&&pass[j]<='Z')
{
pass[j]+=('a'-'A');
}
}
cout<<name<<" "<<pass<<endl;
}
}
if(fk)
{
cout<<"empty";
}
return 0;
}
23:过滤多余的空格
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
string re="";
while(cin>>str)
{
re+=str+' ';
}
re=re.substr(0,re.length()-1);
cout<<re;
return 0;
}
24:单词的长度
#include<iostream>
#include<string>
#include<string.h>
using namespace std;
int main()
{
string str;
string re="";
while(cin>>str)
{
re+=to_string(str.length())+',';
}
re=re.substr(0,re.length()-1);
cout<<re;
return 0;
}
25:最长最短单词
#include<iostream>
#include<string>
#include<string.h>
using namespace std;
int main()
{
string str;
int maxl,minl;
string max,min;
minl=20000;
maxl=0;
while(cin>>str)
{
if(str.length()>maxl)
{
max=str;
maxl=str.length();
}
if(str.length()<minl)
{
min=str;
minl=str.length();
}
}
cout<<max<<endl<<min;
return 0;
}
26:字符串最大跨距
#include<iostream>
#include<string>
#include<string.h>
using namespace std;
int main()
{
string s,s1,s2,s3;
cin>>s;
s1 = s.substr(0,s.find(','));
s2 = s.substr(s.find_first_of(',')+1,s.find_last_of(',')-s.find_first_of(',')-1);
s3 = s.substr(s.find_last_of(',')+1);
string::size_type a=s1.find(s2);
string::size_type b=s1.find(s3);
int c=-1;
if((a!=string::npos)&&(b!=string::npos)&&(a<b)&&(a+s2.length()<=b))
{
c=s1.rfind(s3)-s2.length()-a;
}
cout<<c;
return 0;
}
27:单词翻转
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string s,s1="";
getline(cin,s);
s+=" ";
for(int i=0;i<s.length();++i)
{
if(s[i]!=' ')
{
s1+=s[i];
}
else
{
reverse(s1.begin(),s1.end());
s=s.substr(0,i-s1.length())+s1+s.substr(i);
s1="";
}
}
s=s.substr(0,s.length()-1);
cout<<s;
return 0;
}
28:单词倒排
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string s="",s1="";
while(cin>>s1)
{
s=s1+" "+s;
}
s=s.substr(0,s.length()-1);
cout<<s;
return 0;
}
生化危机开始,只好在家敲敲代码了【托腮】
29:ISBN号码
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string s1="";
char code;
int d=0,j=1;
cin>>s1;
for(int i=0;i<s1.length()-2;++i)
{
if(s1[i]!='-')
{
d=d+(s1[i]-'0')*j;
j++;
}
}
d%=11;
if(d==10)
{
code='X';
}
else
{
code=d+'0';
}
if(code==s1[s1.length()-1])
{
cout<<"Right";
}
else
{
cout<<s1.substr(0,s1.length()-1)+code;
}
return 0;
}
30:字符环【造环】
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string s1="",s2="";
int re=0,a=0,b=0;
cin>>s1>>s2;
int le1=s1.length();
int le2=s2.length();
s1+=s1;
s2+=s2;
b=min(le1,le2);
for(int i=0;i<le1;++i)
{
for(int j=0;j<le2;++j)
{
re=0;//限制长度
//更改起始点来模拟环
for(int t1=i,t2=j;s1[t1]==s2[t2]&&re<b;t1++,t2++)re++;
if(re>a)a=re;
}
}
cout<<a;
return 0;
}
31:字符串p型编码
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string s="",p="";
int re[10]={},index=1;
cin>>s;
for(int i=0;i<s.length();++i)
{
if(s[i]==s[i+1])
{
index++;
}
else
{
cout<<to_string(index)<<s[i];
index=1;
}
}
return 0;
}
32:行程长度编码
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string s="",p="";
int re[10]={},index=1;
cin>>s;
//大小写处理
for(int i=0;i<s.length();++i)
{
if('a'<=s[i]&&s[i]<='z')s[i]-=('a'-'A');
}
for(int i=0;i<s.length();++i)
{
if(s[i]==s[i+1])
{
index++;
}
else
{
cout<<"("<<s[i]<<","<<index<<")";
index=1;
}
}
return 0;
}
33:判断字符串是否为回文
#include<iostream>
#include<string>
#include<algorithm>
#include<stack>
using namespace std;
int main()
{
string s="",p="";
int re[10]={},index=1;
cin>>s;
stack<char> S;
int i=0,flag=0;
for(;i<s.length()/2;++i) S.push(s[i]);
if(s.length()%2)++i;
for(;!S.empty();++i)
{
if(S.top()!=s[i])
{
flag=1;
break;
}
else
{
S.pop();
}
}
if(flag)
{
cout<<"no";
}
else
{
cout<<"yes";
}
return 0;
}
34:回文子串
#include<iostream>
#include<string>
#include<algorithm>
#include<stack>
using namespace std;
int main()
{
string s="",p="";
int re[10]={},index=1,flag=0;
cin>>s;
for(int i=2;i<=s.length();++i)
{
for(int j=0;j<=s.length()-i;++j)
{
string t=s.substr(j,i);
flag=0;
for(int k=0;k<t.length()/2;++k)
{
if(t[k]!=t[t.length()-k-1])
{
flag=1;break;
}
}
if(!flag)
{
cout<<t<<endl;
}
}
}
return 0;
}
35:字符串的展开
#include<cstdio>
char a[300],d,e,f,j,p;
int main()
{
int p1,p2,p3,i=0,k;
scanf("%d%d%d%s",&p1,&p2,&p3,a);
for(;a[i];i++)
{
d=a[i-1],e=a[i+1],f=a[i];
if(f=='-'&&e>d&&(d>='0'&&e<='9'||d>='a'&&e<='z'))
{
for(p3==1?j=d+1:j=e-1;p3==1?j<e:j>d;p3==1?j++:j--
{
p=j;
if(p1==2)
p=(p>='a')?p-32:p;
else if(p1==3) p='*';
for(k=0;k<p2;k++)
printf("%c",p);
}
}
else
printf("%c",f);
}
return 0;
}
