【问题标题】:scanf skip all until a stringscanf 跳过所有直到一个字符串
【发布时间】:2015-10-19 11:38:19
【问题描述】:

是否可以使用 scanf 跳过所有字符,直到我到达特定的字符串。

我有一个 html 文件,我想跳过该字符串之前和包括此字符串的所有字符:"<h2><a href=",然后读取两个引号之间的 http 链接。

【问题讨论】:

  • 使用fgets + strstr
  • scanf不可能。
  • 就我个人而言,如果我还没有一个正则表达式库,我会安装一个。
  • 谢谢大家,我找到了一些使用 fscanf 的步骤。

标签: c string scanf


【解决方案1】:

我偶然发现了一个多么古老的问题。尽管如此,它仍然在这里,我想我已经得到了一个很好的答案。那么,为什么不留给后代,对吧?

你被告知scanf 做不到。好吧,我不同意,原因如下:

scanf 可以忽略所有内容,直到找到所查找字符串的第一个字母

scanf ("%*[^<]");

然后它可以尝试忽略您要查找的字符串(逐个字符)。

found = scanf ("<h2><a href=\"%[^\"]", str_link) == 1;

如果它还不是它,它将失败并停止执行,永远不会到达%[^\"] 命令,该命令读取/存储所有内容,直到找到" 字符。

在这种情况下,它返回 0EOF,因为无法执行扫描(它返回它能够填充多少变量)

现在,如果找到了,它最终会执行读取并返回1

  • 注意:您应该查看文档以获取准确信息,该文档可在 cplusplus.com 上找到

    while ( !found && !feof(stdin) )
    {
        scanf ("%*[^<]");
        found = scanf ("<h2><a href=\"%[^\"]", str_link) == 1;
    }
    

我想文件的其余部分可以忽略。 由你决定。

我想这是一个很好的方法,因为它充分利用了scanf 的速度,并且不需要您存储整个文件。 这个想法可以应用于许多其他任务。

scanf 是一个非常强大的工具,虽然有点棘手。

【讨论】:

    【解决方案2】:

    您始终可以搜索字符串 href=",然后在此处设置一个指针。然后复制或扫描字符串,直到再次遇到 "。 而(*p!='"'){ 复制到缓冲区; }

    【讨论】:

      猜你喜欢
      • 2022-11-24
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      • 1970-01-01
      • 2011-10-21
      • 2021-07-31
      相关资源
      最近更新 更多