一周学完C++,第四天,字符串习题

题集来自Acwing:https://www.acwing.com/problem/ 
例如搜750题,直接添加750即可:https://www.acwing.com/problem/750

题目766-去掉多余空格
    //方法1,利用cin读入时省略多余空格(略)。
    //方法2,使用getline整行读取并双指针判断删除空格。

 string s;
    getline(cin,s);
    
    string r;
    for(int i=0;i<s.size();i++)
    {
        if(s[i] != ' ') r = r+s[i];
        else
        {
            r = r + " ";
            int j = i; //用于定位当前连续空格的首位
            while(j<s.size() and s[j]== " ") j++ //满足连续空格条件就自增
            i = j - 1 ; //已经过滤掉所有空格,-1是因为i++ 
        }
    }
    cout << r << endl;

题目764 输出字符串

 string a,b;
    getline(cin,a);
    
    for(int i=0;i<a.size();i++)
    {
        //这里取模的原因是i+1超出界限时回到0
        b = b + char(a[i]+a[(i+1)%a.size()]); 
        cout << b << endl;
    }

题目770.单词替换

string s,a,b;
    getline(cin,s);
    cin>>a>>b;
    
    //ssin就是提取字符串中需要的信息,比如说
    //stringstream ssin(s);
    //int a,b;string str;
    //ssin >> a >> str >> b ;
    //cout << a << str << b ; 
    
    stringstream ssin(s);
    string str;
    while(ssin >> str){
        if(str == a) cout << b << " ";
        else cout << str << " ";
        
    return 0;
    }

题目771.字符串中最长的连续出现的字符-双指针算法

 for(int i=0;i<s.size();i++)
    {
        int j=i;
        while(j<s.size() and s[j]=s[i]) j++;
        r = j-1;
    }
   
   
    int n;
    cin >> n;
    while(n--)
    {
        string str;
        cin >> str ;
        
        int cnt = 0; //最大出现次数
        char c; //最大出现的字符
        
        for(int i = 0;i <str.size();i++)
        {
            int j = i;
            //此时i与j之间就是所有相同字符段
            while(j<str.size() and str[j] == str[i]) j++; 
            if(j-i > cnt) {
                cnt = j-i;
                c = str[i];
                i = j -1 ;
            }
            cout << c << " " << cnt << endl;
        }
    }

题目774 最长单词

 string res,str;
    
    //cin读取时,自动以空格作为划分
    while(cin >> str)
    {
        //string中back()用于返回字符串的最后一个字符
        //string中pop_back()用于去掉字符串的最后一个字符
        if(str.back() == '.') str.pop_back();
        if(str.size() > res.size()) res = str;
    }
    cout << res << endl;

题目775 倒排单词

string str[100];
    
    int n=0;
    while(cin >> str[n]) n++;
    
    for(int i=n-1;i>=0;i--)
    {
        cout << str[i] << " ";
    }

题目776 字符串移位包含问题

 string a,b;
    cin >> a >> b;
    
    if(a.size()<b.size()) swap(a,b);
    
    for(int i=0;i<a.size();i++)
    {
        //循环移位
        a = a.substr(1) + a[0];
        //至少留出原单词相等的距离,这样后面不够长度的就可以省略对比了
        for(int j=0;j+b.size()<=a.size();j++)
        {
            
            for(int k =0;k<b.size();k++)
            {
                if(a[j+k]!= b[k]) break ;
                if(k == b.size())
                {
                    puts("true");
                    return 0;
                }
            }
        }
    }
    puts("false");
    return 0;

题目778 字符串最大跨距

 string s,s1,s2;
    char c;
    
    while(cin >> c,c!=",") s= s+c;
    while(cin >> c,c!=",") s1= s1+c;
    while(cin >> c) s2= s2+c;
    
    int l = 0;
    while(l + s1.size() <= s.size())
    {
        int k=0;
        while(k < s1.size())
        {
            if(s[l+k] != s1[k]) break;
            k++;
        }
        if(k == s1.size()) break;
        l++;
    }
    
    int r = s.size()-s2.size();
    while(r>=0)
    {
        int k=0;
        while(k < s2.size())
        {
            if(s[r+k] != s2[k]) break;
            k++;
        }
            if(k == s2.size()) break;
            r--;
    }
    
    l = l+s1.size()-1;
    
    if(l >= r) puts("-1");
    else printf("%d\n",r-l-1);
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值