本文介绍了转义方括号]在sscanf中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想扫描类似
的行"[25, 28] => 34"
我写了一个小程序进行测试:
#include <cstdlib>
#include <iostream>
int main() {
char* line = "[25, 28] => 34";
char a1[100], a2[100];
int i;
sscanf(line, "[%[^,], %[^]] => %i", a1, a2, &i);
std::cout << "a1 = " << a1 <<"
a2 = " << a2 << "
i = "<<i <<"
";
return 0;
}
编译此文件可提供
warning: unknown escape sequence ']'
和输出
a1 = 25
a2 = 28
i = -1073746244
如果我将其更改为
sscanf(line, "[%[^,], %[^]] => %i", a1, a2, &i);
我没有收到编译器投诉,但仍然
a1 = 25
a2 = 28
i = -1073746244
我知道问题出在第二个令牌中,因为
sscanf(line, "[%[^,], %[0123456789]] => %i", a1, a2, &i);
提供
a1 = 25
a2 = 28
i = 34
但是我想对第二个令牌使用终止条件。我该怎么做?
推荐答案
您想要
sscanf(line, "[%[^,], %[^]]] => %i", a1, a2, &i);
注意三个连续的]
字符--第一个字符是%[
集中不想匹配的字符,第二个字符以%[
开始结束集合,第三个字符与输入中的]
字符匹配
这篇关于转义方括号]在sscanf中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!