题目传送门:https://pintia.cn/problem-sets/994805260223102976/exam/proble...
第五个测试点过不去,不知道什么问题:
#include<bits/stdc++.h>using namespace std;//压缩void fun1(string s){ int cnt = 1; //算上自身所以是1 string ss; //首先看一下相同的字母就count++;,这样count就存储了要压缩的字母的个数 for (int i = 0; i < s.size(); i++) { if (s[i] == s[i + 1])cnt++; else { if (cnt == 1)ss += s[i]; //只有一个字符的话不要把数字加上,即1s,而是直接加s,即 s else ss += to_string(cnt) + s[i]; //要压缩的字母个数+字母 cnt = 1; //重置 } } cout << ss<<endl; }//解压void fun2(string s){ int index = 0; string ss; //解压的话我们需要看数字以及数字后面的字符 while (index < s.size()) { if(isdigit(s[index])&&isdigit(s[index+1])) { int temp= (s[index] - '0') * 10 + (s[index + 1] - '0'); while (temp--) { if(index+2<s.size()) ss += s[index + 2]; } index += 3; } else if (isdigit(s[index])) { int temp = s[index] - '0'; while (temp--) { if(index+1<s.size()) ss += s[index + 1]; } index += 2; } else //字母 { if(index<s.size()) { ss += s[index]; index++; } } } cout << ss<<endl;}int main(){ char c; cin >> c; getchar(); string s; getline(cin, s); if (c == 'C') fun1(s); else if (c == 'D') fun2(s); return 0;}
修正代码
首先,我们需要明确题目的要求。根据提供的链接,这是一个字符串压缩与解压的问题。压缩时,连续的相同字符会被替换为字符及其连续出现的次数;解压时,需要还原回原始字符串。
现在,我们来看你的代码。
fun1
)* 你在循环中使用了 `s[i + 1]`,这可能会导致数组越界,因为当 `i` 是最后一个字符时,`s[i + 1]` 是未定义的。* 你的代码逻辑在处理只有一个字符的连续序列时存在问题。当只有一个字符时,你不应该增加 `cnt`,而应该直接添加到结果字符串中。
fun2
)* 你的代码在处理数字时存在问题。例如,对于输入 "3a4b",你的代码会错误地处理为 "aaabbbb",而不是正确的 "aaaabbbb"。* 你在处理数字时,没有考虑到数字可能超过两位数的情况。
下面是修正后的代码:
#include<bits/stdc++.h>using namespace std;void fun1(string s) { string ss; int cnt = 1; for (int i = 1; i <= s.size(); i++) { if (i < s.size() && s[i] == s[i - 1]) { cnt++; } else { if (cnt > 1) ss += to_string(cnt); ss += s[i - 1]; cnt = 1; } } cout << ss << endl;}void fun2(string s) { string ss; int num = 0, i = 0; while (i < s.size()) { if (isdigit(s[i])) { num = num * 10 + (s[i] - '0'); i++; } else { while (num--) ss += s[i]; num = 0; i++; } } cout << ss << endl;}int main() { char c; cin >> c; getchar(); string s; getline(cin, s); if (c == 'C') fun1(s); else if (c == 'D') fun2(s); return 0;}
这个修正的代码应该能解决你的问题,并通过第五个测试点。
本文向大家介绍php压缩和解压缩字符串的方法,包括了php压缩和解压缩字符串的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php压缩和解压缩字符串的方法。分享给大家供大家参考。具体如下: 下面php代码通过gzcompress和gzuncompress压缩和解压缩字符串,可以设定压缩级别 希望本文所述对大家的php程序设计有所帮助。
本文向大家介绍C#自定义字符串压缩和解压缩的方法,包括了C#自定义字符串压缩和解压缩的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#自定义字符串压缩和解压缩的方法。分享给大家供大家参考。具体如下: 代码使用方法: 希望本文所述对大家的C#程序设计有所帮助。
问题内容: 我在想办法也无法在Java中解压缩String时遇到麻烦。这是我要学习的基本Java类,因此只需要基本命令,没有什么花哨的地方。它能够输入的目标 在命令提示符下,它将打印(就像它压缩参数字符串一样)。 另一个目标是输入 它将打印(就像它将解压缩参数String一样)。减压是我遇到的问题。这是我的代码,非常感谢我得到的任何帮助。 问题答案: Quick Code for you..
问题内容: 我正在使用以下代码来压缩和解压缩字符串数据,但是我面临的问题是,它很容易被压缩而不会出错,但是decompress方法会引发以下错误。 线程“主”中的异常java.io.IOException:不是GZIP格式 仍然不知道如何解决此问题!!! 问题答案: 这是因为 发送您可以从中获得的,并在其中使用它来构建您的。以下是需要在代码中进行的更改。
问题内容: python docs将此代码作为zip的反向操作: 特别是 zip()与*运算符一起可用于解压缩列表。 有人可以向我解释运算符在这种情况下如何工作吗?据我了解,是一个二进制运算符,可以用于乘法或浅表复制…在这里似乎都不是这样。 问题答案: 像这样使用时,*(星号,在某些情况下也称为“ splat”运算符)是从列表中解压缩参数的信号。有关示例的更完整定义,请参见http://docs.
本文向大家介绍python用模块zlib压缩与解压字符串和文件的方法,包括了python用模块zlib压缩与解压字符串和文件的方法的使用技巧和注意事项,需要的朋友参考一下 python中zlib模块是用来压缩或者解压缩数据,以便保存和传输。它是其他压缩工具的基础。下面来一起看看python用模块zlib压缩与解压字符串和文件的方法。话不多说,直接来看示例代码。 例子1:压缩与解压字符串 结果 例子