Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将字符数组int值增加1_C - Fatal编程技术网

C 将字符数组int值增加1

C 将字符数组int值增加1,c,C,大家好,我有一个字符数组,它包含一个ID字段。 id字段如下所示:i0001。 当我在我的链接列表中创建一个新链接时,我想将ID增加1 因此,我通过链表对最后一个值进行排序,例如:;i0005,现在我想创建我的新字段作为i0006。很明显,我不能因为数组是一个字符就增加它的值,我应该怎么做呢 char id[5]; 我试过: id[4] = id[4]+1; 问题是当它达到10时,它不会增加id[3],而是开始用符号替换数值(我假设这些是数字后面的ascii值) 有人知道他们会怎么做吗?我有

大家好,我有一个字符数组,它包含一个ID字段。 id字段如下所示:i0001。 当我在我的链接列表中创建一个新链接时,我想将ID增加1

因此,我通过链表对最后一个值进行排序,例如:;i0005,现在我想创建我的新字段作为i0006。很明显,我不能因为数组是一个字符就增加它的值,我应该怎么做呢

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]没有改变的原因try
char id[6]=“i0009”对于这个简单的例子,使用strtok是过分的。我同意,我认为这是最好的