【问题标题】:How to convert array of char into array of int in C Programming? [duplicate]如何在 C 编程中将 char 数组转换为 int 数组? [复制]
【发布时间】:2021-09-02 06:25:19
【问题描述】:
#include<stdio.h>

#include<stdlib.h>

#define LENGTH 5 

void convert ( char parray[] ,int array[] )

{

    int i; 
    for (i=0; i< LENGTH; i++)
    {
        array[i] = atoi(&parray[i]);
        printf(" The converted array is %d\n" , array[i]);
    }
}

int main ()

{

    char parray[LENGTH] = { '7', '1', '4','5' ,'2'};

    int iarray[LENGTH];

    convert(parray, iarray);
}

********* 输出*********

The converted array is 71452

The converted array is 1452

The converted array is 452

The converted array is 52

The converted array is 2

But I want the following output like this

The converted array is 7

The converted array is 1

The converted array is 4

The converted array is 5

The converted array is 2

它应该在 array[0] 中存储 7 的值,在 array[1] 中存储 1 !!!!请帮忙

【问题讨论】:

  • 我试过它给了我错误 Mr.LSerni : 错误:传递 'atoi' 的参数 1 使指针从整数没有强制转换 [-Werror=int-conversion] array[i] = atoi(parray [i]);
  • 1) 字符串需要以空值结尾。 2) atoi 将整个字符串转换为整数,而不是逐位转换。
  • 对不起,我没有仔细看。我认为这是一个不同性质的数组。 MikeCAT已经给出了正确答案。
  • 感谢 Mr.LSerni 和 Mr.Lundin 的宝贵时间

标签: arrays c type-conversion


【解决方案1】:

atoi() 用于将字符串(以空字符结尾的字符序列)转换为整数。要将单个字符转换为整数,可以从字符中减去'0'0 的字符代码),因为在 C 规范中保证十进制数字的字符代码是连续的。

void convert ( char parray[] ,int array[] )

{

    int i; 
    for (i=0; i< LENGTH; i++)
    {
        array[i] = parray[i] - '0';
        printf(" The converted array is %d\n" , array[i]);
    }
}

【讨论】:

  • 我认为 60k 用户应该先寻找骗子。
  • 感谢 Mike 先生抽出宝贵时间,在我测试时它实际上运行良好。
  • @0___________ 虽然我能理解你为什么选择那个欺骗目标(我不会对此提出异议),但请注意它确实解决了@的使用本例中为 987654326@ 函数。
【解决方案2】:

此声明

array[i] = atoi(&parray[i]);

调用未定义的行为,因为字符数组parray 不包含字符串:以零字符'\0' 结尾的字符序列。而函数atoi 需要一个字符串作为它的参数。

你可以写

array[i] = parray[i] - '0';

字符 '0''9' 增加了 1 个代码序列。例如,如果写 '3' - '0' 你会得到整数 3

【讨论】:

  • 字符数组[LENGTH] = { '-7', '1', '4','5' ,'2'};我有多个字符,如 -7 并将其存储在数组 [0] = -7 当我在 parray 中给出 -7 时它给出错误。错误:多字符字符常量 [-Werror=multichar]
  • @AnasMunir 它是一个多字节字符。它的表示是实现定义的。
【解决方案3】:

您将单个字符与字符 字符串 混淆了。后者是以nul(零值)字符结尾的字符序列(数组),这就是atoi 函数期望的输入。

要将单个字符数字转换为其数值,您只需从该字符的值中减去零位('0')的值(数字的值是由标准保证是连续的)。

所以,而不是:

array[i] = atoi(&parray[i]);

使用:

array[i] = parray[i] - '0'; // Will work if (and only if) parray[i] is a digit.

您的代码中发生的情况是(偶然)在 5 字符数组结束后立即有一个零字节(但您可以依赖于此),所以每个 @ 987654326@ 调用传递的字符串分别以'7''1''5''4''2' 字符开头,并且仅在'2' 之后结束。因此,您获得的值表示由各个数组数字串联形成的数字。但我再说一遍:你不能依赖数组后面有一个零值字符

【讨论】:

  • 字符数组[LENGTH] = { '-7', '1', '4','5' ,'2'};我有多个字符,例如 -7 并将其存储在数组 [0] = -7 中!当我在 parray 中给出 -7 时,它给出错误。错误:多字符字符常量 [-Werror=multichar]
  • @AnasMunir 我认为使用'-7' 来初始化char 变量会使您处于未定义的行为领域。在我的系统上,它代表一个 int 常量值 11575 但如何解释为 char 可能会有所不同。
  • 基本上我在问有没有办法转换多个字符,比如-7。我的程序只适用于像 1 4 9 这样的单个字符。但不适用于 14 或 -7。有没有办法可以修改我的函数以转换多个字符?阿德里安先生
  • @AnasMunir 您需要将您的parray 声明为字符串数组(const char* parray[] = {"-7", "1", "4", "5", "2"}; - 由于添加了 nul 终止符,即使“一位数”值也将是 2 个字符的数组) 然后在每个字符串上调用atoi(parray[i])(没有&amp; 符号)。
  • @Anas - string 文字使用 double 引号,单字符文字使用单引号。 '2' 是一个字符(实际上是一个int); "2" 是一个字符串,由数字 2 和一个 nul 终止符组成。
猜你喜欢
  • 2014-03-02
  • 1970-01-01
  • 2013-05-02
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多