C ++ - 使用临时变量的索引数组

时间:2013-03-20 20:04:24

标签: c++ arrays string indexing

我现在处于用C ++编写程序的早期阶段,用英语替代整数输入。我不希望有关如何制作此程序的说明,而是要了解代码的某个部分如何以某种方式运行,并且可能会提示如何修复它。

std::string strToEng(std::string s)
{
  int sInt = atoi(s.c_str());


  std::string digit1[] = {"zero", "one", "two", "three", "four", "five", "six", "seven",
                          "eight", "nine", "ten", "eleven", "twelve", "thirteen",
                          "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", 
                          "nineteen"};

  switch(s.size())
  {
    case 1:
    {
      int temp = int(s[0]);
      return digit1[temp];
    }
   }

  return "error";
}

问题在于switch语句中的digit1数组。当我编译此代码时,案例1不会返回所需的输出。如果我将digit1 [temp]更改为某种常量(即digit1 [3]),它会正确显示。使用变量索引数组是否存在问题?我该如何解决这个问题?

编辑:也许是欺骗性的,我无法处理高于9的数字,但它们仍然包含在digit1中。原因是这段代码已经被重写了几次。

2 个答案:

答案 0 :(得分:2)

您应该使用digit1[sInt],因为您已经将字符串转换为int值...

s[0]只是String的第一个char,所以如果第一个char是'0',那么它的值是48(参见ASCII表),然后你访问你的第49个元素table ...在你的情况1中,你可以尝试int(s[0])-'0',它应该可以工作。

答案 1 :(得分:0)

你将s的第一个字符转换为int,所以如果s包含一个数字,则该值在十进制数字的ASCII值范围内,即48到57.为什么不使用你在s中正确创建的int sInt你职能的第一行?