如何将此函数转换为循环?

时间:2014-03-04 17:13:20

标签: c++ arrays loops

我有一个包含未知数量元素的字母数组,其中包含小写字母。我编写了一个将小写编号转换为ASCII值的函数

int returnVal (char x)
{
    return (int) x;
}

我正在尝试将所有这些值组合成一个数字。从这些中减去87意味着该值始终是2位数。我可以通过以下两个元素组合一个数组:

returnVal (foo[0]) - 87) + returnVal (foo[1] - 87) * 100

组成的三个元素组成的数组
returnVal (foo[0]) - 87) + returnVal (foo[1] -87) * 100 + returnVal (foo[2] - 87) * 100 * 100

我将每个元素乘以100 ^它在数组中的位置并将它们相加。这意味着[a,b,c]将变为121110(是的,“翻转”具有'c'的值,而'a'的最后是有意的)。任何人都可以编程(对于一组未知数量的元素)?

编辑:在我生命中的任何一个项目中,我都没有接受任何形式的编程/计算机科学教育,这不是家庭作业。我正在努力教自己,我已经陷入困境;我不认识任何人,我可以去寻求帮助,所以我在这里问道,向那些被冒犯的人道歉。

EDIT2:我知道这个意见会让很多人感到烦恼;如果不交换信息,stackoverflow.com的目的是什么?如果我是一个坚持我的家庭作业的孩子(我不是)肯定这是使用堆栈溢出的正当理由?这个网站上的很多人似乎都有这样的心态:如果初学者提出问题就不值得回答,这完全没问题,因为你的时间是你自己的。然而,真正让我感到困惑的是那些看到一个他们认为微不足道的问题并且说“家庭作业”并立即投票的人。我认为如果没有提出问题所需的“最低级别”知识,这个网站会好得多,我认为“精英主义”的心态只是幼稚。

2 个答案:

答案 0 :(得分:1)

由于这是一个学习练习,这里有一些提示可供您自己完成任务:

  • 准备一个值,该值将作为您的号码的“运行总计”到目前为止。
  • 在零开始运行总计。
  • 当您将某个数字(例如"1234")转换为int时,此值首先变为1,然后变为12,然后变为123,最后1234
  • 运行总计的最终值是您的最终结果
  • 要从之前的值转到下一个值,请将先前值乘以10,然后将当前数字的值添加到其中
  • 您的returnVal没有意义,因为在C语言中,您经常可以避免将char明确转换为int。在这种情况下你绝对可以避免它。
  • 创建一个返回十进制数值的函数int digit(char c),即c-'a',会更有用,因为它可以让您在多个位置摆脱c-87

答案 1 :(得分:0)

char array[SIZE];
long factor=1;
long result=0;
for(int i=0; i<SIZE; i++)
{
    result+=returnVal(foo[i])-87)*factor;
    factor*=100;
}

只要long足够大以保持100^the position的值,并且当然,只要结果不会溢出,这应该有用。