c++ - 将数字转换为其 POSTNET 代码

标签 c++ zipcode

我正在编写一个程序,该程序应该获取邮政编码(由 int 表示)并将其解析为 POSTNET等效的(由 C++ std::string 表示),反之亦然。将 POSTNET 代码转换为邮政编码的算法工作正常,但将邮政编码转换为 POSTNET 的算法无法正常工作。我已将问题的原因隔离为 getSequence() 函数;有什么问题吗?

这是我的代码:

string ZipCode::getBarCode()
{
    string zipCode = itoa(this->zipCode, new char[5], 10);
    string sequences[5];
    for(int i = 0; i < 5; ++i)
        sequences[i] = getSequence(zipCode[i] - '0');
    string toReturn = "1";
    for(string &sequence : sequences)
        toReturn += sequence;
    return toReturn + "1";
}

string ZipCode::getSequence(int digit)
{
    if(digit == 0)
        return "11000";
    string toReturn = "00000";
    int values[4] = {7, 4, 2, 1};
    for(int i = 0; i < 4; ++i)
        if(digit < values[i])
        {
            toReturn = toReturn.replace(i, 1, "1");
            digit -= values[i];
        }
    if(containsOnlyOne1(toReturn))
        toReturn = toReturn.replace(4, 1, "1");
    return toReturn;
}

bool ZipCode::containsOnlyOne1(std::string str)
{
    int instancesOfOne = 0;
    for(int i = 0; i < str.length(); ++i)
        if(str[i] == '1')
            instancesOfOne++;
    return instancesOfOne == 1;
}

此外,这里还有一些测试用例:

ZIP Code        Expected Output                    Actual Output
24060           100101010011100001100110001        111110111101100011110110001
92064           110100001011100001100010011        100000111101100011110111101
11518           100011000110101000011100101        111110111101111011110000001

不确定这是否有帮助,但我是第一次学习 C++ 的 Java 程序员。

最佳答案

我认为你的问题在这里:

if(digit < values[i])

应该是>=不是< .

最大的提示是接下来发生的事情 - 你减去 values[i]来自digit ,如果 < 将导致负数条件为真。这看起来根本不像你想要的。

关于c++ - 将数字转换为其 POSTNET 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17645308/

相关文章:

c++ - Directwrite:获取字体的高度

c++ - 查找不在索引 vector 中的索引

forms - CFML 从 form.zipcode 中仅选择 3 个整数

php - 为什么用 VC9 构建的 PHP SAPI (php5_apache.dll) 不能与用 VC6 构建的 Apache 一起工作

c++ - Qt Layout/Widget 交互 - Layouts within Layouts

c++ - 按位整数转换

javascript - 如何将城市或州名称转换为邮政编码

timezone - 将美国邮政编码映射到时区

php - 使用邮政编码查找两个地方之间的距离(英里)