我需要读取一个字符,直到下列顺序写入:\ NX \ N:
(.....)\n
x\n
\ n是新行字符和(.....)可以是可以包括其它\ n个字符的任何字符。
scanf函数允许正则表达式,据我知道,但我不能使它读取字符串,直到这个模式。 你能不能帮我scanf格式串中?
我是想是这样的:
char input[50000];
scanf(" %[^(\nx\n)]", input);
但它不工作。
我需要读取一个字符,直到下列顺序写入:\ NX \ N:
(.....)\n
x\n
\ n是新行字符和(.....)可以是可以包括其它\ n个字符的任何字符。
scanf函数允许正则表达式,据我知道,但我不能使它读取字符串,直到这个模式。 你能不能帮我scanf格式串中?
我是想是这样的:
char input[50000];
scanf(" %[^(\nx\n)]", input);
但它不工作。
scanf
允许正则表达式,据我所知
不幸的是,它不允许正则表达式:语法是误导接近,但并没有什么甚至远程类似于实施正则表达式scanf
。 所有这一切的存在是一个支持字符类正则表达式,那么%[<something>]
被隐含当作[<something>]*
。 这就是为什么你的通话scanf
转化成阅读由比其他字符的字符串'(', ')', 'x', and '\n'
。
为了解决在手你的问题,你可以设置一个循环,读取字符输入字符。 每当你得到一个'\n'
,检查
'\n'
是一个'x'
,并 'x'
是另一个'\n'
如果所有上述是真实的,你已经达到了预期的输入序列的结束; 否则,你的循环应该继续。
scanf
不支持正则表达式。 它有一个字符类有限的支持,但是这不是在所有同样的事情。
切勿使用scanf
, fscanf
或sscanf
,这是因为:
%s
)是不安全的完全相同的方式gets
是不安全的,即它们会乐呵呵地写过去所提供的缓冲区的结束和你的程序崩溃。 你不需要对这种情况下的正则表达式; 在与时间读取一行getline
,当读行只是“X”停止。 但是,标准(ISO不C,但是POSIX)正则表达式库函数调用regcomp
和regexec
。