c++ - 字符向量的奇怪输出
问题描述
背景:
这个问题来自 Daily Coding 问题 #29。
游程编码是一种快速而简单的字符串编码方法。基本思想是将重复的连续字符表示为单个计数和字符。例如,字符串“AAAABBBCCDAA”将被编码为“4A3B2C1D2A”。
实现游程编码和解码。您可以假设要编码的字符串没有数字并且仅由字母字符组成。您可以假设要解码的字符串是有效的。
尝试的解决方案:
#include <iostream>
#include <string>
#include <vector>
std::vector<char> run_length(std::string str)
{
std::vector<char> result;
if (str.empty() || str.size() == 1)
{
const char *ch = str.c_str();
result.push_back(*ch);
return result;
}
int count = 1;
for (int i = 1; i < str.size(); ++i)
{
if (str[i] == str[i - 1])
count++;
else
{
if (count > 1)
{
char ch = count;
result.push_back(ch);
}
result.push_back(str[i - 1]);
count = 1;
}
}
if (count > 1)
{
char ch = count;
result.push_back(ch);
}
result.push_back(str[str.size() - 1]);
return result;
}
int main()
{
std::string str = "AAAABBBCCAA";
auto result = run_length(str);
for (auto it : result)
std::cout << it << " ";
std::cin.get();
}
预期输出:
4A3B2C1D2A
实际输出:
A B C A
问题:
为什么我会在实际输出中得到这些奇怪的字符?我相信我的方法的逻辑应该可以解决问题,但我得到了这些我以前从未见过的角色。非常感谢任何建议。
解决方案
线
char ch = count;
是不正确的。
如果count
为 4,则ch
初始化为由整数值 4 编码的字符。您需要获取表示数字的字符。你需要'4'
. 您可以使用以下内容从中获取数字count
。
char ch = '0' + count;
但是,如果count
大于 9,那将不起作用。count
如果您期望大于 9,您将不得不提出不同的策略。
推荐阅读
- graphics - 为什么 VGA 颜色需要按位移位?
- python - 如何在 Python 中使用通配符复制多个文件?
- typescript - 开玩笑地使用构造函数参数模拟新对象的创建
- c# - OpenID 连接身份验证中的 ValidateIssuer 选项
- rabbitmq - RabbitMQ 队列随机变为空白,剩余大约 5K 条消息
- entity-framework - 实体框架 6 ReferentialConstraint 中的依赖属性映射到存储生成的列。错误
- bigdata - 大数据集示例
- javascript - 不使用模板引擎时如何在 Express.js 视图中包含 CSS 文件?
- scala - 如何使用 scala 方法创建文件?
- javascript - JS:函数未定义,无法创建 JSON 对象,因为 JS 无法识别键是字符串