1

我有一个 [S{i,j} : this is stack overflow] 我想提取的形式的字符串i,jthis is stack overflow两个单独的字符串。sscanf 在这里不起作用,因为要提取的字符串可以有空格。

谁能建议一种有效的方法来做到这一点?

4

1 回答 1

9

如果字符串不能包含结束方括号,您绝对可以使用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 )
{
}
于 2013-04-08T11:31:34.883 回答