gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:49:49 25 4
gpt4 key购买 nike

我正在编写一个程序,它应该获取邮政编码(由 int 表示)并将其解析为 POSTNET等效(由 C++ std::string 表示),反之亦然。将 POSTNET 代码转换为 ZIP 代码的算法工作正常,但将 ZIP 代码转换为 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

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

最佳答案

我认为你的问题出在这里:

if(digit < values[i])

应该是>=不是< .

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com