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;

}

以上是 PAT乙级 1078. 字符串压缩与解压 (20),第4个测试点一直无法通过 的全部内容, 来源链接: utcz.com/p/192868.html

回到顶部