2012-10-23 45 views
1

說,如果我有這樣的從拉弦兩個整數用C

char foo[10] = "%r1%r2"; 

我想拿出12並將其轉換成int個字符串。我怎麼能這樣做呢?

+0

字符串 「喜歡」 什麼? %-letter數 - % - 字母 - 數字?只是混亂混合? – djechlin

回答

4
if (sscanf(foo, "%%r%d%%r%d", &i1, &i2) != 2) 
    ...format error... 

當您sscanf()做格式我明白%d是一個十進制INT但爲什麼你有%%r

如果你正在尋找的源字符串字面%,你用%%指定格式字符串(在printf(),你用%%格式字符串在輸出中生成一個%) ; r代表自己。

還有其他方法可以指定轉換,例如%*[^0-9]%d%*[^0-9]%d;它使用分配抑制(*)和一個掃描集([^0-9],任何不是數字的東西)。這些信息應該可以從sscanf()的手冊頁獲得。

+0

這有助於感謝,但我有一個問題......當你做scanf的格式我明白%d是一個十進制整數,但爲什麼你有%% r?我不確定你能解釋什麼? – user1769152

+0

我現在明白了,謝謝! – user1769152

2

可以使用sscanf(),讓您的結果

0

考慮到你的字符串在每個字符串後面都有兩個'%'和一個數字。 例如:

char foo[10] = "%123%874"; 

不要忘了包括STDLIB庫:

#include <stdlib.h> 

下面的代碼將獲得123到r1和874到R2。

for(int i = 1; ; i++) 
     if(foo[i] == '%') 
     { 
      r2 = atoi(&foo[i + 1]); // this line will transform what is after the second '%' into an integer and save it into r2 
      foo[i] = 0; // this line will make the place where the second '%' was to be the end of the string now 
      break; 
     } 
    r1 = atoi(&foo[1]); // this line transforms whatever is after the first character ('%') into an int and save it into r1 
0
int array[MAXLEN]; 
int counter = 0; 
for(int i = 0; i < strlen(foo); i++){ 
    if(isdigit(foo[i]) && (counter < MAXLEN)){ 
     array[counter++] = (int)(foo[i]-'0'); 
    } 
} 
//integers are in array[].