lza6p
lza6p
采纳率81.8%
2020-03-04 21:17

c++基础问题,由于初学者,不会,求大神帮忙?

已采纳

有一种字符串压缩方式简单易行。那就是,如果有连续很多个相同的字符,就把他们写作:字符+出现次数的形式。

例如:aaagbbbbaac压缩成a3gb4a2c

现在你也来试试。

注意:字符单个出现的不作改变,只有连续出现多次才有改变。

输入格式

一个字符串,由小写英文字母组成。(长度小于240)

输出格式

一个字符串,表示压缩后的字符串。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 1年前
    #include <iostream>
    #include<cstring>
    using namespace std;
    int main()
    {
    char a[1005];
    int len,i,sum=0;
    gets(a);
    len=strlen(a);
    for(i=0;i<=len-1;i++){
    sum++;
    if(a[i+1]!=a[i]){
    if(sum==1){
    printf("%c",a[i]);
    sum=0;
    }
    else{
    printf("%d%c",sum,a[i]);
    sum=0;
    }
    }
    }
    }
    
    

    https://blog.csdn.net/weixin_42807063/article/details/91414714

    问题解决的话,请点采纳

    点赞 1 评论 复制链接分享
  • weixin_43891765 格戮 1年前
    #include<string>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    string shuzi(int n) {
        string s="";
        while(n) {
            s.push_back(n%10+'0');
            n/=10;
        }
        reverse(s.begin(),s.end());
        return s;
    }
    string compressString(string S) {
        if(!S.size())
            return "";
        string s="";
        s.push_back(S[0]);
        for(int i=1; i<S.size(); i++) {
            int t=1;
            while(i<S.size()&&S[i]==s[s.size()-1]) {
                i++;
                t++;
            }
            s+=shuzi(t);
            if(i<S.size())
                s.push_back(S[i]);
        }
        if(s[s.size()-1]<'0'||s[s.size()-1]>'9')
            s.push_back('1');
        return s.size()<S.size()?s:S;
    }
    int main() {
        string s;
        cin>>s;
        cout<<compressString(s);
        return 0;
    }
    
    点赞 评论 复制链接分享

为你推荐