我需要读取一个字符串,直到写入以下序列:\nx \n:
(.....)\n
x\n
Run Code Online (Sandbox Code Playgroud)
\n是新行字符,(.....)可以是任何可能包含其他\n字符的字符.
据我所知,scanf允许正则表达式,但我不能让它读取字符串直到这个模式.你能帮我解决scanf格式字符串吗?
我在尝试这样的事情:
char input[50000];
scanf(" %[^(\nx\n)]", input);
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
das*_*ght 15
scanf据我所知,允许正则表达式
不幸的是,它不允许使用正则表达式:语法错误地接近,但是在实现中没有任何东西甚至与正则表达式类似scanf.所有这些都支持正则表达式的字符类,因此%[<something>]被隐式处理为[<something>]*.这就是为什么你的调用scanf转换为读取由字符以外的字符组成的字符串的原因'(', ')', 'x', and '\n'.
要解决您手头的问题,您可以设置一个循环,逐个字符地读取输入字符.每次你得到一个'\n',检查一下
'\n'是'x',和'x'是另一个'\n'如果以上都是真的,那么您已达到预期输入序列的末尾; 否则,你的循环应该继续.
zwo*_*wol 13
scanf 不支持正则表达式.它对字符类的支持有限,但这根本不是一回事.
永远不要使用scanf,, fscanf或sscanf因为:
%s)以不完全相同的方式gets不安全,即它们会愉快地写入提供缓冲区的末尾并使程序崩溃.对于这种情况,您不需要正则表达式; 一次读取一行,getline当读取的行只是"x"时停止.但是,标准(ISO不C,但是POSIX)正则表达式库函数调用regcomp和regexec.
| 归档时间: |
|
| 查看次数: |
18405 次 |
| 最近记录: |