2015-10-13 134 views
3

嗨,大家好我有一個字符數組,其中包含一個ID字段。 id字段如下所示i0001。 我想在我的鏈接列表中創建新鏈接時將ID加1。增加字符數組int值int 1

所以我有點通過鏈表的最後一個值,這是例子; i0005,現在我想創建我的新領域作爲i0006。顯然,我不能只增加數組的值,因爲它是一個字符,我應該怎麼做呢?

char id[5]; 

我嘗試:

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

與此問題它不遞增ID [3],當它擊中10,代替它開始替換爲符號的數值(ⅰ假定這些是數字後面的ascii值)。

任何人都知道他們會怎麼做?我有點難住!

+3

如果格式是固定的,即'iXXX'那麼你可以簡單地擺脫i'(移動指針到一個字符串)的',將字符串轉換爲數字(使用' strtol()'函數),將數字增加1,最後寫回字符串(使用'sprtinf()'函數)。 – Crozin

+6

我會將它作爲一個數字存儲並根據需要生成一個id字符串。 – molbdnilo

+1

我同意@molbdnilo。但是,如果你要這樣做 - 'id [4] = id [4] +1;' - 不要:相反,使用'++ id [4];'。一個理智的編譯器會將它們優化爲相同的,但爲什麼在不需要時輸入更多? –

回答

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'}, 但它不足以店空終止字符串"i0005"

+2

'inclementArray'?下雨了嗎? :-) –

+0

謝謝你!這似乎是解決我的問題最簡單的方法,感謝它的朋友! – Ryan

+0

似乎在處理最後一位數字時會出現一些錯誤的錯誤。什麼會在'id [0]'結束? – Lundin

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.

+0

嘗試'char id [6] =「i0009」;' – BLUEPIXY

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); 
} 
+0

使用'strtok'這個簡單的例子是隻是矯枉過正 –

+0

我同意,我認爲[這個答案](http://stackoverflow.com/a/33102322/3691891)是最好的。 –

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);