繁体   English   中英

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

[英]C Converting Char array (strings) into int array

我一直在寻找几个小时,但我似乎无法找到答案,特别是在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]中,然后不填写其余部分。 是否有某种功能使这一切变得简单快捷?

先感谢您。

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

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()语句的方法应该非常简单。

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

将字符串转换为整数的sscanf或atoi有什么区别?

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

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之间的数字!

我用'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咬。 如果您直接转换为整数,则无法获得正确的值转换,因为内存地址会重叠。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM