我有一个
[S{i,j} : this is stack overflow]
我想提取的形式的字符串i,j
和this is stack overflow
两个单独的字符串。sscanf 在这里不起作用,因为要提取的字符串可以有空格。
谁能建议一种有效的方法来做到这一点?
如果字符串不能包含结束方括号,您绝对可以使用sscanf()
:
int i, j;
char text[128];
if( sscanf(input, "[S{%d,%d} : %127[^]]", &i, &j, text) == 3 )
{
printf("got it all!\n");
}
有关鲜为人知的转换说明符的更多信息[
,请参见本手册页。基本上,转换%[^]]
意味着“除了右方括号之外的所有字符,它是一种特殊形式的语法,使用否定 ( ^
) 和加倍右括号以将其包含在否定字符集中。
更新如果您真的是指“在两个单独的字符串中”,那么上面的内容当然是错误的,因为它将数字解析为int
-type 变量。要将对作为字符串,请使用以下内容:
char ij[32], text[128];
if( sscanf(input, "[S{%31[^}]} : %127[^]]", ij, text) == 2 )
{
}