【问题标题】:How to store characters in an integer array? [duplicate]如何将字符存储在整数数组中? [复制]
【发布时间】:2019-04-23 04:21:43
【问题描述】:

我正在尝试实现一个函数,该函数将为我得到的计算器作业解析数字。已经设置了一个 for 循环,它将遍历输入数组中的每个索引,这是一个算术方程,例如“1+2+3+4+5”。我创建了一个函数 isDigit(),如果字符介于 0 和 9 之间,它将返回 true 或 false。这就是我解析数字的方式。我的问题是这些数字没有永久存储在我想返回的 numbers[] 数组中。

目前正在将数字打印到控制台,第一个 cout 为“12345”,但第二个 cout(当前已评论)用于检查我返回的数组存储的内容是一个模棱两可的十六进制数字。有人可以帮我在数字[]中返回“12345”。

int * parseNumbers(char input[])
{
    static int numbers[10];

    for (int i = 0; i < strlen(input); i++)
    {
        if (isDigit(input[i]))
        {
            numbers[i] = input[i] - '0';
            cout << numbers[i];
        }
    }
    //cout << numbers << endl;
    return(numbers);
}

数字 = 1、2、3、4、5

当前获取数字 = 002D26E8

【问题讨论】:

  • 为什么不像以前那样简单地使用循环来打印每个元素?被注释掉的cout 是行不通的,而且这个数字也不是“模棱两可的”。是静态int数组的地址。
  • 另外,您可能需要第二个索引,否则非整数字符会在 numbers 数组中留下空白。 numbers[index++] = input[i];
  • 在第二次cout 调用中,数组decays into a pointer,这是cout 输出的内容。您必须使用循环来打印数组的各个元素。
  • @JohnnyMopp 谢谢我已经能够通过再次迭代并跳过每个第二个数字来摆脱我的数字之间的零值。
  • @PaulMcKenzie 所以当我返回“数字”并将其传递给另一个函数时,我能否对数组的每个数字执行操作?谢谢

标签: c++


【解决方案1】:

我认为您正在寻找的是将 char 转换为 int 的 atoi

而不是使用numbers[i] = input[i] - '0';

试试这个:

numbers[i] = atoi(input[i]);

如果没有添加,请确保有#include &lt;stdlib.h&gt;

参考:http://www.cplusplus.com/reference/cstdlib/atoi/

【讨论】:

  • input[i] 是单个字符,atoi(或改进的标准函数strtol)不适用于单个字符。 input[i] - '0' 是正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-08
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-04
  • 1970-01-01
相关资源
最近更新 更多