2013-04-08 25 views
1

提取格式的數據我有形式 [S{i,j} : this is stack overflow] 我想在兩個單獨字符串提取i,jthis is stack overflow的字符串。 sscanf在這裏不能工作,因爲要提取的字符串可以有空格。高效的方式使用C

任何人都可以請建議一個有效的方法來做到這一點?

回答

9

如果字符串不能包含結束括號,你完全可以用sscanf()

int i, j; 
char text[128]; 

if(sscanf(input, "[S{%d,%d} : %127[^]]", &i, &j, text) == 3) 
{ 
    printf("got it all!\n"); 
} 

有關有點鮮爲人知的轉換符[的更多信息,請參見例如this manual page。基本上,變換%[^]]是指「除右方括號中的所有字符,這是同時使用否定(^)和右括號加倍將其包括在該組的取反字符的語法的一種特殊形式。

UPDATE如果你真的「在兩個單獨的字符串」的意思,那當然上面是錯誤的,因爲它解析出的數字爲int型變量要獲得對作爲一個字符串,使用類似:

char ij[32], text[128]; 

if(sscanf(input, "[S{%31[^}]} : %127[^]]", ij, text) == 2) 
{ 
} 
+0

爲什麼downvote ?這是有效的,並且是標準的 – cnicutar 2013-04-08 11:36:17

+2

將'%S'改爲'S',它可以正常工作:http://ideone.com/ ZAe1N4(我沒有降低你的答案)。 – Crozin 2013-04-08 11:37:35

+0

+1擊敗我:) – 2013-04-08 11:38:28