【问题标题】:C++ - index array using temporary variableC++ - 使用临时变量的索引数组
【发布时间】:2013-03-20 20:04:24
【问题描述】:

我正处于用 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 中。原因是这段代码被重写了好几次。

【问题讨论】:

  • “使用变量索引数组有问题吗?”主啊,我希望不会。
  • 这个问题看起来与您的转化有关int(s[0])。这对我来说看起来像一个强制转换,它只是将字节从 char 解释为 int,这取决于 ascii 值。 '1' 与 1 不同。您将需要使用某种方法将该字符转换为 int。 (我看到您已经在代码中使用了 atoi)
  • int temp = int(s[0]);???打开 s.size()???这不好。
  • 描述你认为s.size() 做了什么。描述你认为int(s[0]) 做了什么。
  • 如果我的代码有问题,我很抱歉。我想自己解决这个问题。如果我想到更好的东西,我可能会重写它。

标签: c++ arrays string indexing


【解决方案1】:

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

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

【讨论】:

  • 啊,谢谢!我没有考虑到这一点。这似乎是最好的解决方案。我没有为此目的使用 sInt(实际上我以为我删除了它......),因为我打算扩展它以处理多个数字。
  • @Steven J Wayne Esq:atoi 已经为您处理多个数字。
【解决方案2】:

您将 s 的第一个字符转换为 int,因此如果 s 包含一个数字,则该值在 48 到 57 的十进制数字的 ASCII 值范围内。为什么不使用您在函数的第一行?

【讨论】:

    猜你喜欢
    • 2016-03-25
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多