c - scanf 跳过所有直到一个字符串

标签 c string scanf

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

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

最佳答案

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

你被告知 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 是一个非常强大的工具,尽管有点棘手。

关于c - scanf 跳过所有直到一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33213412/

相关文章:

string - 如何计算postgresql中字符串中数字的总和

java - 如何在 java/android 中重复执行任务?

c - sprintf 格式 - u 之前有三个 '%%%',n 之前有两个 '%%'?

python - 为什么 len ("".split ("")) 给出 1? Python

c - 使用fscanf读取字符串和空行

c - 如何使用两个scanf避免用户输入越界?

c - 如何才能不断地为某个点添加某个值?

c++ - C/C++ 的广泛执行

c - 受限3体重力模拟c

c - 是否可以将整数传递给字符串的精度说明符