C将Char数组(字符串)转换为int数组

时间:2016-04-21 02:24:48

标签: c arrays type-conversion

我一直在寻找几个小时,但我似乎无法找到答案,特别是在C语言方面。在java中,这将是一个简单的铸造等问题,但我似乎无法在C中牢牢抓住它。

我的问题是:我必须从用户那里获得输入,他们可以输入0到31之间的任何数字。他们最多可以输入31个数字。他们可以重复。 输入可能如下所示:3 15 32.我知道如何使用fgets()函数获取此输入并将其存储为字符串。我将输入存储在数组s [];

现在,我坚持的部分,如何将其转换为int数组,以便int int [0] = 3,i [1] = 15,i [2] = 32等

我尝试使用sscanf(s,“%d”,int),但它只能从输入中获取第一个数字,将其存储在int [0]中,然后不填写其余部分。是否有某种功能可以使这一切变得简单快捷?

提前谢谢。

3 个答案:

答案 0 :(得分:2)

您可以使用库,也可以编写辅助函数。辅助函数看起来像这样(伪代码):

int output = 0;
for (int i = 0; i < string.length; i++) {
  output = output * 10;
  output = output + parse(string[i]) //parse first character into a single digit
}

例如,如果你有253,它将读为2.然后它将乘以10(20)并加上5(25)。然后它将乘以10(250)并加3,这将是预期的输出。

请注意,您需要找到一种方法将字符串的单个字符解析为单个数字整数 - 使用switch()语句之类的内容应该非常简单。

编辑: 如果您正在寻找库函数,请查看以下问题:

What is the difference between sscanf or atoi to convert a string to an integer?

答案 1 :(得分:2)

你可能会过分思考。这是从用户输入不涉及格式化或解析字符串的数字的简单方法。

int numArray[31];
int i = 0;
int num = 0;

while( scanf("%d", &num) > 0 && i < 31 && num >0) {
    numArray[i] = num;
    i++;
}

当用户输入负数或已输入所有31个可能的数字时,循环将停止。

你仍然需要确保用户输入0到31之间的数字!

答案 2 :(得分:0)

自从我使用'C'以来已经有一段时间了,但这是基本想法。要将char数组值转换为整数,您基本上必须将每个值分配给int var,例如:

i[0] = c[0]
i[1] = c[1]
i[2] = c[2]

您无法将数字直接转换为整数引用的原因是因为C分配一个连续的内存空间来容纳这3个字符。根据您使用的编译器将确定char大小和int大小。但如果字符各为8位,则3个字符的数组为3个字节。 16位int将等于6咬。如果您直接转换为整数,则无法获得正确的值转换,因为内存地址会重叠。