»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; }