scanf跳过所有内容直到字符串

3

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

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


2
使用 fgets + strstr - cadaniluk
无法使用 scanf - BLUEPIXY
如果我还没有正则表达式库,我个人会安装它。 - Laserbeak
谢谢大家,我找到了一些使用fscanf的步骤。 - Yousef Hadder
2个回答

5

我发现了一个很老的问题。尽管如此,它仍然存在,我认为我有一个好答案。那么,为什么不留给后代呢?

你被告知scanf无法做到这一点。我不同意,并且原因如下:

scanf可以忽略直到找到所需字符串的第一个字母之前的所有内容。

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

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

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

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

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

现在,如果它确实找到了,那么它将最终执行读取并返回1

  • note: you should check the documentation for precise information, which can be found at cplusplus.com

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

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

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

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


0
你可以随时搜索字符串href="并在那里设置一个指针。然后复制或扫描字符串,直到再次遇到"
while (*p != '"') {
    // copy to a buffer
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接