我正处于用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中。原因是此代码已被重写多次。

最佳答案

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

s[0]只是字符串的第一个字符,因此,如果第一个字符为'0',则其值为48(请参见ASCII表),然后您可以访问表的第49个元素... 1,您可以尝试int(s[0])-'0',它应该可以工作。

09-27 20:06