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