H5W3
当前位置:H5W3 > 其他技术问题 > 正文

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;
}

图片描述

回答:

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

  • 循环结束条件不对。结束条件是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;
}

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

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址