som*_*one 7 c unix expression scanf formatted-input
我一直在尝试在scanf上使用正则表达式,以便读取最多n个字符的字符串并丢弃其他任何内容,直到新行字符.任何空格都应被视为常规字符,因此包含在要读取的字符串中.我研究了维基百科有关正则表达式的文章,但我无法让scanf正常工作.这是我尝试过的一些代码:
scanf("[ ]*%ns[ ]*[\n]", string);
Run Code Online (Sandbox Code Playgroud)
[]应该用于实际的空格字符,*应该表示一个或多个,n是要读取的字符数,string是用malloc分配的指针.我尝试了几种不同的组合; 但是我倾向于只获得一个句子的第一个单词(停留在空格中).此外,*似乎丢弃一个字符而不是意味着"零或更多"......
任何人都可以详细解释scanf如何解释正则表达式?更重要的是,重复使用getc是否有效?
提前致谢
简短的答案:scanf从字面上讲,不处理正则表达式。
如果要在C中使用正则表达式,则可以使用regex POSIX库。有关此库用法的基本示例,请参见以下问题:C:示例中的正则表达式?
现在,如果您想以scanf某种方式进行操作,可以尝试类似
scanf("%*[ ]%ns%*[ ]\n",str);
Run Code Online (Sandbox Code Playgroud)
将nin 替换为%ns要从输入流读取的最大字符数。该%*[ ]部分要求忽略任何空格。您可以将替换*为特定的数字,以忽略精确的字符数。您可以在花括号之间添加其他字符以忽略多个空格。
不知道上面的scanf是否可以工作,因为空格也与%s指令匹配。
我肯定会打个fgets电话,然后使用以下内容修剪周围的空白:如何以标准方式修剪前导/后缀空白?
| 归档时间: |
|
| 查看次数: |
16637 次 |
| 最近记录: |