在C中提取格式化数据的有效方法

时间:2013-04-08 11:29:44

标签: c string

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

有人可以建议一种有效的方法吗?

1 个答案:

答案 0 :(得分: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 )
{
}