将char数组的int值增加1

时间:2015-10-13 11:58:39

标签: c

嘿大家我都有一个包含ID字段的char数组。 id字段如下所示i0001。 当我在链接列表中创建一个新链接时,我希望将ID增加一个。

所以我将链表排序到最后一个值,例如; i0005,现在我想创建我的新领域i0006。显然我不能只增加数组的值,因为它是一个char,我应该怎么做呢?

char id[5];

我试过了:

id[4] = id[4]+1;

这个问题是它在点击10时不会增加id [3],而是开始用符号替换数值(我假设这些是数字后面的ascii值)。

任何人都知道他们会如何接近这个?我有点难过!

4 个答案:

答案 0 :(得分:2)

自己实施携带应该是好的。

void inclementArray(char *id) {
    int i;
    for (i = 4; i >= 1; i--) {
        id[i]++;
        if (id[i] > '9') {
            id[i] = '0';
            /* do carry and proceed to next digit */
        } else {
            /* no carry, the calculation is completed */
            break;
        }
    }
}

注意:char id[5];足以存储{'i', '0', '0', '0', '5'}, 但它不足以存储以null结尾的字符串"i0005"

答案 1 :(得分:0)

这是一个简单的程序,可以让你知道如何做到这一点 -

#include <stdio.h>
#include <stdlib.h>

int main(void){
   char id[6]="i0001";            // your id 
   char a[5];                     // array to hold first part of id
   int i;                         // integer variable to hold number (non-zero)
   sscanf(id,"%[^1-9]%d",a,&i);   // assign non zero number to i
   i=i+1;                         // add 1 to i 
   sprintf(id,"%s%d",a,i);        // store both a and i again into id
   printf("%s",id);
}

Check output here.

答案 2 :(得分:0)

这样的事情:

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

#define PREFIX "i"

int main(void)
{
    char id[] = "i0001";
    printf("before: %s\n", id);
    int digit = atoi(strtok(id, PREFIX));
    ++digit;
    snprintf(id, sizeof(id), "%s%04d", PREFIX, digit);
    printf("after: %s\n", id);
    exit(0);
}

答案 3 :(得分:0)

像这样做

id[4] = id[4]+1;

不会传到下一个数字。你必须自己携带它。

一种简单的方法

char id[] = "i0005";
int idval;

sscanf(id, "i%d", &idval);
// or scanf(id+1, "%d", &idval);
snprintf(id, sizeof(id), "i%d", idval+1);
// or snprintf(id+1, sizeof(id)-1, "%d", idval+1);