【问题标题】:C++ encoder program not encoding duplicate characters properlyC++ 编码器程序未正确编码重复字符
【发布时间】:2016-07-13 11:26:50
【问题描述】:

对于课程,我正在编写一个编码器程序。它所做的只是将消息文件逐个字符与书本文件进行比较,它找到的第一个匹配字符并将该字符在书本文件中的位置发送到编码文件。但是,一旦它必须再次搜索该字符,它就必须找到该字符的下一次出现。 例如,假设我想使用一个也写有“Hello world”的书文件对“Hello world”进行编码。我应该得到的是一个编码文件,上面写着“0 1 2 3 4 5 6 7 8 9 10 11”,而不是我得到的是“0 1 2 2 4 5 6 4 8 9 10 11”

    for (unsigned int i = 0; i < messageFileVector.size(); i++)
    {
        asciiValue = messageFileVector[i];

        if (asciiValue < 128 || asciiValue >= 0)
        {
            count = startingPosition[(int)asciiValue];
            for (unsigned int j = (unsigned int)startingPosition[(int)asciiValue]; j < (int)bookFileVector.size(); j++)
            {
                if (count == bookFileVector.size() - 1)
                {
                    count = 0;
                    j = 0;
                }
                if (messageFileVector[i] == bookFileVector[j])
                {
                    startingPosition[(int)asciiValue] = count + 1;
                    codedFile << j << " ";
                    break;
                }   
            }
            count++;
            continue;
        }
        else
        {
            cout << "Error: message has non-ascii characters" << endl;
            codedFile.clear();
            return EXIT_FAILURE;
        }

我最好的猜测是我在迭代器上做错了,但对于我的一生,我无法弄清楚是什么。

【问题讨论】:

  • 这是什么编码?
  • 不应该是startingPosition[(int)asciiValue] = j+1吗?
  • @ScottHunter 就像一个魅力,感谢十亿
  • @ScottHunter 我还有一个问题。我设置了起始位置将在到达书本文件末尾时重置。但是它不起作用。假设我的消息文件是“Hello wolrdH”,而我的 bookfile 只是“Hello world”,我应该得到 0 1 2 3 4 5 6 7 8 9 10 11 0,但我得到的是“0 1 2 2 4 5 6 4 8 9 10 11 12"
  • 您似乎没有应用上一个修复程序,而且我认为您的一个文件中有错字。也许你最好再问一个问题?

标签: c++ encoder


【解决方案1】:

startingPosition[(int)asciiValue] 应设置为 j+1,而不是 count+1

【讨论】:

    猜你喜欢
    • 2016-09-30
    • 2016-04-04
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    相关资源
    最近更新 更多