首页 > 解决方案 > 字符向量的奇怪输出

问题描述

背景:

这个问题来自 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  

问题:

为什么我会在实际输出中得到这些奇怪的字符?我相信我的方法的逻辑应该可以解决问题,但我得到了这些我以前从未见过的角色。非常感谢任何建议。

标签: c++stringvectorchar

解决方案


线

char ch = count;

是不正确的。

如果count为 4,则ch初始化为由整数值 4 编码的字符。您需要获取表示数字的字符。你需要'4'. 您可以使用以下内容从中获取数字count

char ch = '0' + count;

但是,如果count大于 9,那将不起作用。count如果您期望大于 9,您将不得不提出不同的策略。


推荐阅读