C 将字符数组int值增加1
大家好,我有一个字符数组,它包含一个ID字段。 id字段如下所示:i0001。 当我在我的链接列表中创建一个新链接时,我想将ID增加1 因此,我通过链表对最后一个值进行排序,例如:;i0005,现在我想创建我的新字段作为i0006。很明显,我不能因为数组是一个字符就增加它的值,我应该怎么做呢C 将字符数组int值增加1,c,C,大家好,我有一个字符数组,它包含一个ID字段。 id字段如下所示:i0001。 当我在我的链接列表中创建一个新链接时,我想将ID增加1 因此,我通过链表对最后一个值进行排序,例如:;i0005,现在我想创建我的新字段作为i0006。很明显,我不能因为数组是一个字符就增加它的值,我应该怎么做呢 char id[5]; 我试过: id[4] = id[4]+1; 问题是当它达到10时,它不会增加id[3],而是开始用符号替换数值(我假设这些是数字后面的ascii值) 有人知道他们会怎么做吗?我有
char id[5];
我试过:
id[4] = id[4]+1;
问题是当它达到10时,它不会增加id[3],而是开始用符号替换数值(我假设这些是数字后面的ascii值)
有人知道他们会怎么做吗?我有点不知所措 自己携带应该很好
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;
}
}
}
注:charid[5]
足以存储{'i',0',0',0',5'}
,,
但是它不足以存储以null结尾的字符串
“i0005”
,下面是一个简单的程序,它将告诉您如何执行此操作-
#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);
}
#包括
#包括
内部主(空){
字符id[6]=“i0001”//您的id
char a[5];//保存id第一部分的数组
int i;//保存数字的整数变量(非零)
sscanf(id,“%[^1-9]%d”、a和i);//为i分配非零数
i=i+1;//将1添加到i
sprintf(id,“%s%d”,a,i);//将a和i再次存储到id中
printf(“%s”,id);
}
类似这样的内容:
#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);
}
#包括
#包括
#包括
#定义前缀“i”
内部主(空)
{
字符id[]=“i0001”;
printf(“之前:%s\n”,id);
int digit=atoi(strtok(id,前缀));
++数字;
snprintf(id,sizeof(id),%s%04d”,前缀,数字);
printf(“在%s\n之后”,id);
出口(0);
}
就是这样做的
id[4] = id[4]+1;
scanf(id+1, "%d", &idval);
snprintf(id+1, sizeof(id)-1, "%d", idval+1);
将不会传递到下一个数字。您必须自己携带,但这当然需要更多的代码行
一个简单的方法是将数字转换为值,增加并打印回来
char id[] = "i0005";
int idval;
sscanf(id, "i%d", &idval);
snprintf(id, sizeof(id), "i%d", idval+1);
或者,像这样忽略i
前缀扫描数字
id[4] = id[4]+1;
scanf(id+1, "%d", &idval);
snprintf(id+1, sizeof(id)-1, "%d", idval+1);
如果格式是常量,即
iXXX
,那么您可以简单地去掉i
(将指针移向字符串一),将字符串转换为数字(使用strtol()
函数),将数字增加1,最后将其写回字符串(使用sprtinf()
函数)。我会将其存储为一个数字,并根据需要生成一个id字符串。我同意@molbdnilo。但是,如果要执行此操作-id[4]=id[4]+1代码>-不要:而是使用++id[4]代码>。一个健全的编译器会将它们优化为相同的,但是为什么不必输入更多呢?@molbdnilo:注意(可能很重要)这一点,首先这些字符串不是有效的字符串。增加字符串值不是一个好主意。当您有一个值0009
时,是否将其转换为0010
。使用int
值可能是更好的解决方案。将int转换为所需的字符串并不困难。inclementArray
?下雨了吗?:-)谢谢你,伙计!这似乎是解决我的问题最简单的方法,朋友,谢谢!当处理最后一个数字时,这里似乎有一些错误。在id[0]
中会出现什么结果?第一个数字总是i,所以我们不改变它,这就是id[0]没有改变的原因trychar id[6]=“i0009”代码>对于这个简单的例子,使用strtok是过分的。我同意,我认为这是最好的