字符串习题

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;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值