问题标题: 酷町堂:2852 字符串擦除字符并压缩

0
1
已解决
张帆
张帆
中级天翼
中级天翼
#include<bits/stdc++.h>
using namespace std;
int main(){
    string s,d,l;
    cin>>s;
    int cnt;
    char g;
    for(int i=0;i<s.length();i++){
        if(!(s[i]>='a'&&s[i]<='z')){
            s=s.erase(i,1);
            i--;
        }
    }
    for(int i=0;i<s.length();i++){
        if(s[i]==s[i+1]){
            g=s[i];
            for(int j=i;j<s.length();j++){
                if(s[j]==g){
                    cnt++;
                }
                else{
                    break;
                }
            }
            d+=g;
            while(cnt!=0){
                l+=(char)(cnt%10+48);
                cnt/=10;
                if(cnt==0){
                    break;
                }
            }
            for(int k=l.length()-1;k>=0;k--){
                d+=l[i];
            }
            i+=(cnt-1);
            cnt=0;
            l="";
        }
        else{
            d+=s[i]; 
        }

    }
    cout<<d;
    return 0;
} 

我的代码为什么是死循环

 

 

2852   字符串擦除字符并压缩

题目描述 Description
给出一个全部由小写字母和数字组成的字符串。请先将这个字符串中的数字全部擦除。然后为了将这个字符串存储起来,并且尽可能地节省空间,现在将多个连续出现的相同字母,改写成这个字母本身后面跟上最长的连续的个数的形式。比如"…baaaaac…"这个部分可以改写成"…ba5c…"(连续出现的个数可能会超过10个)。如果字符一个个单独出现,则不需要压缩。给出一个 字符串,试着输出经处理的结果。

输入描述 Input Description
一行,一个字符串,含有小写字母和数字

输出描述 Output Description
处理之后的字符串的结果

样例输入 Sample Input
aaaaaa5bbbb323b2g

样例输出 Sample Output
a6b5g

 


0
1
潘晨皓
潘晨皓
高级天翼
高级天翼

是不是因为你用万能头?

0
刘乐宸
刘乐宸
新手天翼
新手天翼
 int cnt=1;
        if(a[i]==a[i+1])
        {
            while(a[i]==a[i+1])
            {
                cnt++;
                i++;
            }

上面是循环内代码,不是整段!!!

你的第一个循环不变,后面全用我的,再在循环里加一个判断:

如果cnt等于1
        {
           输出a[i]      
        }
        或者 如果cnt>1{
            输出a[i]和cnt              
        }

 

我要回答