【问题标题】:how Convert char[] of numbers to integer number?如何将数字的 char[] 转换为整数?
【发布时间】:2011-05-04 02:34:34
【问题描述】:

假设我有:

Operand[2][4] = {{"1", "2", "3", "4"},{"5", "6", "7", "8"}};

我有一些名为 Operand1_sign 和 Operand2_sign 的位变量(0:正数和 1:负数)假设它们是:

Operand1_sign = 0;
Operand2_sign = 1;

如何将其转换为 2 个整数并对它们进行一些运算(例如求和)

signed int Operand1, Operand2, Result;

所以最后我可以得到以下内容:

Operand1 = + 1234;
Operand2 = - 5678;
Result = Operand1 + Operand2;

【问题讨论】:

  • int atoi (const char * str) ?,见cplusplus.com/reference/clibrary/cstdlib/atoi
  • 我没有注意到您添加了“作业”标签。我错过了什么吗?
  • 这只是PIC18项目的一小部分
  • @Tong: 如何输入 Operand[][] 作为 atoi() 的参数?抱歉,我习惯了 JAVA,我是 C 的新手 :)
  • 顺便说一句,atoi 将失败,因为 Operand 值不是以 0 结尾的。如果你有char Operand[2][5] = {{'1', '2', '3', '4', '\0'},{'5', '6', '7', '8', '\0'}};,它会起作用

标签: c char int


【解决方案1】:

不回答,我给你一个线索:数字1234也可以表示为1 * 1000 + 2*100 + 3*10 + 4*1——这就是解析数字的关键:)

【讨论】:

  • 但是这种技术似乎只适用于固定长度的数组。在我的项目中,每次我都有不同的输入,所以数组不会被固定(实际上它最多有 13 个)
  • 这也适用于非固定长度的数组,有点聪明 - 你是对的,你不能直接应用它
  • @Eng.Fouad 你从来没有提到你的问题中操作数的大小可能是可变的。
  • 我正在寻找将 char[] 转换为 int,我说没关系,我可以将它应用于可变大小的数组
  • “假设我有:Operand[2][4]”。这几乎是固定的。另外,我真的会避免自己进行解析。标准库中已经有相应的功能。
【解决方案2】:

我可以这样建议:​​

#include <stdio.h>
#include <string.h>

int my_atoi(char* operand, int bufsize, int sign)
{
    char* value = new char[bufsize+1];
    memcpy(value, operand, bufsize);
    value[bufsize] = '\0';
    int ret = 0;
    sscanf(value, "%d", &ret);
    if (sign < 0)
    {
        ret = -ret;
    }
    delete [] value;
    return ret;
}

void main()
{
    char Operand[2][4] = {{'1', '2', '3', '4'},{'5', '6', '7', '8'}};
    signed int Operand1 = my_atoi(Operand[0], 4, 1);
    signed int Operand2 = my_atoi(Operand[1], 4, -1);
    signed int Result = Operand1 + Operand2;
}

但是,我绝对建议您将字符串作为以空字符结尾的字符串。在这种情况下,您可以跳过 my_atoi 的手动实现,然后执行以下操作:

#include <stdlib.h>

void main()
{
    char Operand[2][5] = {{'1', '2', '3', '4', '\0'},{'5', '6', '7', '8', '\0'}};
    signed int Operand1 = atoi(Operand[0]);
    signed int Operand2 = -atoi(Operand[1]);
    signed int Result = Operand1 + Operand2;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 2019-11-18
    • 2011-08-28
    • 1970-01-01
    • 2011-06-05
    相关资源
    最近更新 更多