我有一个作业,我想在输入一个数字时打印一个特定的代码,例如90621.我想按顺序提取该数字并打印代码ex:提取数字9打印代码 - >提取0(按顺序)。
事情是我只知道如何以相反的顺序提取数字(例如:首先提取1然后提取为90621的2)并且我不确定如何按顺序执行。我在这里看到一些帖子,人们将数字转换为字符串,但我不能这样做,因为我正在调用的函数之一将int作为参数。到目前为止,我们还只介绍了循环和if函数等基础知识,所以我不确定如何使用堆栈或数组。
这是我目前为止提取数字和打印代码的代码:
External Parameters\entrada_seguranca
有关功能的一些信息:
- 函数 codeForDigit(int digit)取一个数字并返回该数字的代码。
- string barCode(int zip){
string result;
int n;
while (zip > 0){
n = zip % 10;
result += codeForDigit(n);
zip = zip / 10;
}
return result;
}
通过将数字分成单个数字,编码该数字,并将其添加到字符串返回值,返回整个条形码。
答案 0 :(得分:3)
一种简单的方法是通过递归。事实上,它非常优雅。你可以这样写:
string barCode(int zip)
{
if (zip <= 0) return "";
return (barCode(zip / 10) + codeForDigit(zip % 10));
}
基本上,您使用调用堆栈作为堆栈来存储以前的字符串。它也是编写此功能的最小方式。
答案 1 :(得分:1)
您可以在完成将每个数字转换为char后完成字符串结果:
std::string barCode(int zip){
std::string result;
while(zip > 0){
result += zip % 10 + '0';
zip /= 10;
}
std::reverse(result.begin(), result.end());
return result;
}
int main(){
std::cout << barCode(245) << std::endl;
return 0;
}
答案 2 :(得分:0)
一种解决方案可能是:
string barCode(int zip)
{
string result;
if(zip <=0) return "";
//Find 10s in zip
int i=zip/10;
int nTens = 0;
while( i<=0)
{
i = i/10;
nTens++;
}
int n;
for (int j=0; j<=nTens ; j++)
{
n = zip / pow(10, (nTens-j));
result += codeForDigit(n);
zip = zip - n * pow(10, (nTens-j))
}
return result;
}
答案 3 :(得分:0)
我认为简单的方法是转换字符串中的数字并迭代它:
int zip = 123456789;
std::string digits = std::to_string(zip);
std::string barcode;
int d=0;
for (auto it=digits.begin(); it != digits.end();it++)
{
d= int(*it);
barcode.push_back(codeForDigit(d-'0'));
}