私は、郵便番号 ( で表される) を取り、それをPOSTNETに相当するもの ( C++ で表されるint) に解析し、その逆を行うプログラムを作成しています。POSTNET コードを ZIP コードに変換するアルゴリズムは正常に機能しますが、ZIP コードを POSTNET に変換するアルゴリズムは正しく機能しません。問題の原因を関数に切り分けました。そこに問題はありますか?std::stringgetSequence()
これが私のコードです:
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 プログラマーです。