1
提取格式的數據我有形式 [S{i,j} : this is stack overflow]
我想在兩個單獨字符串提取i,j
和this is stack overflow
的字符串。 sscanf在這裏不能工作,因爲要提取的字符串可以有空格。高效的方式使用C
任何人都可以請建議一個有效的方法來做到這一點?
提取格式的數據我有形式 [S{i,j} : this is stack overflow]
我想在兩個單獨字符串提取i,j
和this is stack overflow
的字符串。 sscanf在這裏不能工作,因爲要提取的字符串可以有空格。高效的方式使用C
任何人都可以請建議一個有效的方法來做到這一點?
如果字符串不能包含結束括號,你完全可以用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)
{
}
爲什麼downvote ?這是有效的,並且是標準的 – cnicutar 2013-04-08 11:36:17
將'%S'改爲'S',它可以正常工作:http://ideone.com/ ZAe1N4(我沒有降低你的答案)。 – Crozin 2013-04-08 11:37:35
+1擊敗我:) – 2013-04-08 11:38:28