PAT乙级 1078. 字符串压缩与解压 (20),第4个测试点一直无法通过

题目传送门:https://www.patest.cn/contest...

样例都通过了,实在是找不到问题出在哪里哭唧唧
代码如下:

#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main(){
    char c,t;
    cin>>c;
    getchar();
    string s,ans;
    getline(cin,s);
    int cnt;
    if(c=='C'){
        cnt=1;
        for(int i=0;i<s.length();i++){
            if(s[i]==s[i+1]){
                cnt++;
            }else{
                if(cnt!=1){
                    ans+=(char)(cnt+'0');
                    cnt=1;
                }
                ans+=s[i];
            }
        }
    }else if(c=='D'){
        cnt=0;
        for(int i=0;i<s.length();i++){
            if(isdigit(s[i])){
                cnt=cnt*10+(s[i]-'0');
            }else{
                if(cnt!=0){
                    for(int j=0;j<cnt;j++){
                        cout<<s[i];
                    }
                }else{
                    cout<<s[i];
                }
                cnt=0;
            }
        }
    }
    cout<<ans;
    return 0;
}

图片描述

阅读 4.2k
2 个回答

大概看了一下,发现了几处错误,在压缩部分:

  • 循环结束条件不对。结束条件是i<s.length但里面却去取s[i+1]
  • ans+=(char)(cnt+'0');这句在cnt>9的时候怎么办?

ac代码如下:

#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main(){
    char c,t;
    cin>>c;
    getchar();
    string s,ans;
    getline(cin,s);
    int cnt;
    if(c=='C'){
        cnt=1;
        for(int i=0;i<s.length();i++){
            if(s[i]==s[i+1]){
                cnt++;
            }else{
                if(cnt!=1){
                    cout<<cnt; //不能用ans+=(char)(cnt+'0'); 考虑cnt>9的情况
                    cnt=1;
                }
                cout<<s[i];
            }
        }
    }else if(c=='D'){
        cnt=0;
        for(int i=0;i<s.length();i++){
            if(isdigit(s[i])){
                cnt=cnt*10+(s[i]-'0');
            }else{
                if(cnt!=0){
                    for(int j=0;j<cnt;j++){
                        cout<<s[i];
                    }
                }else{
                    cout<<s[i];
                }
                cnt=0;
            }
        }
    }
    cout<<ans;
    return 0;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题