嘿大家我都有一个包含ID字段的char数组。 id字段如下所示i0001。 当我在链接列表中创建一个新链接时,我希望将ID增加一个。
所以我将链表排序到最后一个值,例如; i0005,现在我想创建我的新领域i0006。显然我不能只增加数组的值,因为它是一个char,我应该怎么做呢?
char id[5];
我试过了:
id[4] = id[4]+1;
这个问题是它在点击10时不会增加id [3],而是开始用符号替换数值(我假设这些是数字后面的ascii值)。
任何人都知道他们会如何接近这个?我有点难过!
答案 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);
}
答案 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);