我有一个表格的字符串
[S{i,j} : this is stack overflow]
我想在两个单独的字符串中提取i,j
和this is stack overflow
。
sscanf在这里不起作用,因为要提取的字符串可以有空格。
有人可以建议一种有效的方法吗?
答案 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 )
{
}