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

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

例如:aaagbbbbaac压缩成a3gb4a2c

现在你也来试试。

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

输入格式

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

输出格式

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

c++

2个回答

#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

问题解决的话,请点采纳

lza6p
lza6p 这个的输出不对,数字和字母是反的,我也找到这个了
3 个月之前 回复
#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;
}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐