目录
760. 字符串长度
#include<cstdio>
#include<iostream>
using namespace std;
int main(void)
{
char c; int k=0;
while(scanf("%c",&c)!=EOF) ++k;
printf("%d",k-1);//结束的多余的回车减掉
}
761. 字符串中的数字个数
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
string s;
getline(cin,s);
int k=0;
for(int i=0;i<s.size();i++) if(isdigit(s[i])) k++;
cout<<k<<endl;
return 0;
}
762. 字符串匹配
#include<cstdio>
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
int main(void)
{
double n,k; cin>>n;
string s1,s2; cin>>s1>>s2;
for(int i=0;i<s1.size();i++) if(s1[i]==s2[i]) k+=1;
if(k/s1.size()>=n) printf("yes\n");
else printf("no\n");
return 0;
}
763. 循环相克令
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
int t; cin>>t;
while(t--)
{
string s1,s2; cin>>s1>>s2;
bool flag=false;
if(s1==s2) printf("Tie\n"),flag=true;
if( (s1=="Hunter"&&s2=="Gun") || (s1=="Gun"&&s2=="Bear") || (s1=="Bear"&&s2=="Hunter"))
printf("Player1\n"),flag=true;
if(!flag) printf("Player2\n");
}
return 0;
}
764. 输出字符串
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
string s,ans; getline(cin,s);
for(int i=1;i<s.size();i++) ans+=s[i]+s[i-1];
ans+=s[s.size()-1]+s[0];
cout<<ans<<endl;
return 0;
}
765. 字符串加空格
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
string s,ans; getline(cin,s);
for(int i=0;i<s.size();i++) ans+=s[i],ans+=' ';
cout<<ans<<endl;
return 0;
}
766. 去掉多余的空格
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
string s;
while(cin>>s) cout<<s<<" ";
return 0;
}
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
string s; getline(cin,s);
int i=0;
while(i!=s.size())
{
if(s[i]!=' ') cout<<s[i],i++;
else
{
while(s[i]==' '&&i<s.size()) i++;
cout<<" ";
}
}
return 0;
}
767. 信息加密
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
string s; getline(cin,s);
for(int i=0;i<s.size();i++)
{
if(isalpha(s[i])){
if(s[i]=='z'||s[i]=='Z') printf("%c",s[i]-25);
else printf("%c",s[i]+1);
}
else cout<<s[i];
}
return 0;
}
768. 忽略大小写比较字符串大小
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main(void)
{
string a,b;
getline(cin,a);
getline(cin,b);
for(int i=0;i<a.size();i++) a[i]=toupper(a[i]);
for(int i=0;i<b.size();i++) b[i]=toupper(b[i]);
if(a>b) printf(">\n");
else if(a==b) printf("=\n");
else printf("<\n");
}
769. 替换字符
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
string s; getline(cin,s);
char c; cin>>c;
for(int i=0;i<s.size();i++)
{
if(s[i]==c) cout<<'#';
else cout<<s[i];
}
return 0;
}
770. 单词替换
#include<cstdio>
#include<iostream>
#include<string>
#include<vector>
using namespace std;
vector<string> ve;
int main(void)
{
string s;
while(cin>>s) ve.push_back(s);
for(int i=0;i<ve.size()-2;i++)
{
if(ve[i]==ve[ve.size()-2]) cout<<ve[ve.size()-1];
else cout<<ve[i];
cout<<" ";
}
return 0;
}
771. 字符串中最长的连续出现的字符
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
int t; cin>>t;
while(t--)
{
string s; cin>>s;
char c;
int ans=0;
for(int i=0;i<s.size();i++)
{
int n=1;
while((i+1)<s.size()&&s[i]==s[i+1]) i++,n++;
if(n>ans) ans=n,c=s[i];
}
cout<<c<<" "<<ans<<endl;
}
return 0;
}
772. 只出现一次的字符
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int a[28];
int main(void)
{
char s[100005]; cin>>s;
for(int i=0;i<strlen(s);i++) a[s[i]-'a']++;
bool flag=false;
for(int i=0;i<strlen(s);i++)
{
if(a[s[i]-'a']==1)
{
cout<<s[i];
flag=true;
break;
}
}
if(!flag) cout<<"no"<<endl;
return 0;
}
773. 字符串插入
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
string a,b;
while(cin>>a>>b)
{
bool flag=false;
char temp=' ';
for(int i=0;i<a.size();i++) if(a[i]>temp) temp=a[i];
for(int i=0;i<a.size();i++)
{
cout<<a[i];
if(a[i]==temp&&!flag) cout<<b,flag=true;
}
cout<<endl;
}
}
774. 最长单词
#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;
int main(void)
{
vector<string> ve;
string s;
while(cin>>s) ve.push_back(s);
string ans="";
ve[ve.size()-1]=ve[ve.size()-1].substr(0,ve[ve.size()-1].size()-1);
for(int i=0;i<ve.size();i++)
{
int t=ve[i].size();
if(t>ans.size()) ans=ve[i];
}
cout<<ans<<endl;
return 0;
}
775. 倒排单词
#include<cstdio>
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main(void)
{
vector<string> ve;
string s;
while(cin>>s) ve.push_back(s);
for(int i=ve.size()-1;i>=0;i--) cout<<ve[i]<<" ";
return 0;
}
776. 字符串移位包含问题
模拟做法:
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
string a,b; cin>>a>>b;
bool flag=false;
string temp=a;
if(a.size()<b.size()) swap(a,b);
for(int i=0;i<a.size();i++)
{
for(int j=0;j<a.size();j++)
{
temp[(i+j)%a.size()]=a[j];
}
if(temp.find(b)!=-1){
flag=true;
break;
}
}
if(flag) cout<<"true"<<endl;
else cout<<"false"<<endl;
return 0;
}
#include <iostream>
#include <string>
using namespace std;
bool check(string a, string b)
{
int len = a.size();
a += a; //复制字符串并连接
if (a.find(b) >= 0 && a.find(b) < len) return true; //判断是否包含
return false;
}
int main()
{
string a, b;
cin >> a >> b;
if (check(a, b) || check(b, a)) cout << "true";
else cout << "false";
return 0;
}
777. 字符串乘方
#include<cstdio>
#include<iostream>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
int main(void)
{
string s;
while(cin>>s,s!=".")
{
int n=0;
for(int i=1;i<=s.size();i++)//枚举循环结的长度
{
string ans;
for(int j=0;j<i;j++) ans+=s[j];//计算循环结
if(s.size()%ans.size()==0)//只有整除才可以完整的循环
{
string temp;
for(int k=1;k<=s.size()/ans.size();k++) temp+=ans;//循环成目标的长度
if(temp==s){
n=s.size()/ans.size();//如果相等说明是一个正确的循环结
break;
}
}
}
cout<<n<<endl;
}
return 0;
}
778. 字符串最大跨距
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
string s; cin>>s;
string a,b,c;
a=s.substr(0,s.find(','));
s=s.substr(s.find(',')+1);
b=s.substr(0,s.find(','));
s=s.substr(s.find(',')+1);
c=s;
bool flag=false;
int ans=0;
if(a.find(b)!=-1&&a.find(c)!=-1)
{
int m=a.find(b),n=a.rfind(c);
if((m+b.size())<n) ans=n-(m+b.size()),flag=true;
}
if(flag) cout<<ans<<endl;
else cout<<-1<<endl;
return 0;
}
779. 最长公共字符串后缀
#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
using namespace std;
int main(void)
{
int t;
while(cin>>t,t)
{
vector<string> ve;
int n=245;
while(t--)
{
string s; cin>>s;
reverse(s.begin(),s.end());//翻转便于后期操作
ve.push_back(s);
if(s.size()<n) n=s.size();//求可能的最大前缀长度
}
string ans;
for(int i=0;i<ve.size();i++)
{
if(ans.size()==n) break;//达到极限了
bool flag=false;
for(int j=1;j<ve.size();j++)
{
if(ve[j][ans.size()]!=ve[j-1][ans.size()])
{
flag=true;
break;
}
}
if(!flag) ans+=ve[0][ans.size()];
else break;
}
reverse(ans.begin(),ans.end());//翻转复位
cout<<ans<<endl;
}
return 0;
}