如何拆分价值?

时间:2016-07-06 03:57:50

标签: c embedded

我需要输入

int a= 254321;

然后,

a中的值需要放在新变量中,例如

char b = {21,43,25};

我们该怎么做?

3 个答案:

答案 0 :(得分:3)

使用模块和分区。

int main(void)
{
    int a = 254321;
    int b[5] = {0};
    int i;

    for (i = 0; a ;i++) {
         b[i] = a % 100;
         a = a /100;
    }
}

答案 1 :(得分:2)

正如@M.M所述,/%运营商是您的朋友。通过使用它们,您可以编写如下函数:

#define SPLITTER    100

/* ensure the the value of SPLITTER is not too big for parts to fit into char */
#if SPLITTER > 256
#error value of SPLITTER is to big for type char
#endif

int split(int value, char *parts, int len)
{
    int count = -1;   /* assume error */


    if ((parts) && (len > 0)) /* valid input? */
    {
        count = 0;   /* ok, we have valid input */

        while (value != 0)
        {
            if (count < len)    /* ensure not to exceed size of parts! */
            {
                parts[count] = value % SPLITTER;
            }

            value /= SPLITTER;

            count++;
        }
    }

    return (count);
}

此功能将value拆分为最大&#34;尺寸&#34; SPLITTER - 1的{​​{1}},将它们写入parts的传递内存,并返回已执行拆分的数量(如果输入无效,则返回-1)。

关于您的示例,用法如下:

int result;
char parts[10];
int i;

result = split(254321, parts, 10);
for (i = 0; i < result; i++)
{
    printf("part #%d: %d\n", i + 1, parts[i]);
}

输出将是:

part #1: 21
part #2: 43
part #3: 25

答案 2 :(得分:2)

更不用说,你的问题真的很模糊。准确了解您的要求和使用的语法。声明char b = {25,43,21};除了任何c编译器的直接语法错误之外什么都不是。

假设您的输入始终是一个六位数字&amp;要求是 char b [3] [2] 一个简单的itoa()模拟可能是:

int num, i, j,d;
char b[3][2];

for(i=2; i>=0; i--)
  for(j=1; j>=0; j--){
    d = num % 10;
    b[i][j]= d+48;
    num = num / 10;
  } 

就是这样,您的阵列已经可以使用了。希望这会有所帮助。